學(xué)習(xí)筆記101-sas宏變量(sql+宏建立多表)

太久沒有記錄了,上次差不多是半年前了。工作之后就太忙了,也抽不出時間來記錄。

現(xiàn)在就回來記錄一些吧,要學(xué)的有些雜,筆記也會記得很雜。

現(xiàn)在有一個任務(wù):有一個表cars,其中的make列有多個汽車品牌,現(xiàn)在依據(jù)不同的汽車品牌將表進行拆分,每個子表對應(yīng)一個類型的汽車。

教學(xué)書中的解法:

因為要建多個子表,所以用到了do循環(huán),循環(huán)要用到數(shù)字1 to n,所以這里先將汽車品牌進行映射

使用proc format的方式進行映射,后面可以直接使用 put(&i , carname.)的方式取出對應(yīng)的品牌名。

接下來就是使用sas中的do循環(huán)來進行循環(huán)建表了

和我想的一樣,建立一個宏函數(shù),在其中調(diào)用do循環(huán)和if判斷。

這種方法確實可行,但其實有一個巨大的坑,那就是一開始的映射,你三個汽車品牌可以自己挨個寫,那如果有30個呢?如果有300個呢?

新的解法:
新的解法使用proc SQL與宏函數(shù)結(jié)合來解這個問題(畢竟SQL寫得習(xí)慣了)

首先獲得汽車的品牌列表

然后定義宏來拆分表格

這里解釋一下這個sysfunc(countw(&car_brands));這一行代碼

這個countw的作用就是以空格為分割符進行計數(shù),因為上面獲取列表的時候就是用空格進行分割的。

而sysfunc的這個函數(shù)的意思是讓一些不是宏函數(shù)的函數(shù)再宏中也能發(fā)揮作用。

%let brand = %scan(&car_brands, &i);這行命令就是取出這個值

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容