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

太久沒(méi)有記錄了,上次差不多是半年前了。工作之后就太忙了,也抽不出時(shí)間來(lái)記錄。

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

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

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

因?yàn)橐ǘ鄠€(gè)子表,所以用到了do循環(huán),循環(huán)要用到數(shù)字1 to n,所以這里先將汽車品牌進(jìn)行映射

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

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

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

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

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

首先獲得汽車的品牌列表

然后定義宏來(lái)拆分表格

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

這個(gè)countw的作用就是以空格為分割符進(jìn)行計(jì)數(shù),因?yàn)樯厦娅@取列表的時(shí)候就是用空格進(jìn)行分割的。

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

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

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

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

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