sas macro 入门
macro是在sas中很重要的一個(gè)內(nèi)容,面試的時(shí)候常常會(huì)被問(wèn)到。但是作為新手,一開(kāi)始我們很少有機(jī)會(huì)能接觸到使用Macro的內(nèi)容。Macro在中文中翻譯為宏,我個(gè)人的理解是,它是一個(gè)可以對(duì)于整個(gè)sas宏觀所使用的程序,也正如它的名字一樣,既不屬于data step也不屬于proc step。當(dāng)我們?cè)谧鲆恍┲貜?fù)的只需要改變操作對(duì)象的步驟時(shí),可以利用宏來(lái)減少繁瑣又重復(fù)的過(guò)程。這種感覺(jué)就像在sas中創(chuàng)建了一個(gè)函數(shù),通過(guò)改變函數(shù)中的自變量而得到不同的結(jié)果與輸出。
一. 定義宏變量與宏
1.定義宏變量
有兩種方式定義宏變量:%LET和call symput。定義宏變量并分配一個(gè)值給宏變量的最簡(jiǎn)單方法是使用宏程序語(yǔ)句%LET。格式如下:
%LET 變量名=變量值;
另一個(gè)語(yǔ)句就是call symput,其格式如下:
call symput(變量名,變量值);
2.定義宏
定義宏的語(yǔ)句格式為:
%macro 宏名稱(chēng)(參數(shù)1,參數(shù)2,參數(shù)3);
宏文本
%mend 宏名字;
舉個(gè)例子:
%macro test(sex); data temp1; set temp; where sex=“&sex”;******注意此處要使用雙引號(hào)而不是單引號(hào)*****; run; %mend test;%test(female) %test(male)我們可以通過(guò)改變宏中的參數(shù),來(lái)對(duì)數(shù)據(jù)進(jìn)行篩選。
當(dāng)?shù)谝粋€(gè)宏在執(zhí)行test的時(shí)候,便會(huì)將female這個(gè)值帶入到&sex里, where statment就變成了
where sex=“female”;
二.自動(dòng)宏
自動(dòng)宏實(shí)際上就是系統(tǒng)自帶的一些宏變量。以下為常用內(nèi)容。
SYSDATE SAS啟動(dòng)時(shí)日期;
SYSDATE9 SAS啟動(dòng)時(shí)日期,但是以Date9.格式顯示;
SYSTIME SAS啟動(dòng)開(kāi)始的時(shí)間;
SYSDAY SAS進(jìn)程開(kāi)始是為星期幾;
三. 在proc sql中創(chuàng)建宏變量
假設(shè)我們使用proc sql來(lái)計(jì)算數(shù)值,并將這些數(shù)值加入宏變量中,方便以后的調(diào)用,那我們可以使用 select into語(yǔ)句。
例如,我們想要計(jì)算在整個(gè)數(shù)據(jù)中,treatment里使用了placebo的人數(shù):
那么此時(shí),N就成為了宏變量,以后可以通過(guò)&N 來(lái)對(duì)這個(gè)數(shù)值進(jìn)行調(diào)用。這是一個(gè)避免hard coding的好方法。
我們也可以通過(guò)select into 給多個(gè)宏變量進(jìn)行附值,也就是相當(dāng)于創(chuàng)建了一個(gè)宏變量的list。
例如,我們的id一共有3個(gè),001,002,003,我希望把它提取出來(lái),分別放進(jìn)宏變量name1 name2 name3里:
在這里,distinct的作用是選擇不重復(fù)的id。
四.循環(huán)
我們使用宏的目的實(shí)際上就是為了避免重復(fù)的操作一些內(nèi)容。在某種情況下,宏只需要調(diào)整同一個(gè)參數(shù)。我們可以采用不停的調(diào)用宏的方法來(lái)實(shí)現(xiàn)。也可以使用do循環(huán)幫我們省略更多的步驟(當(dāng)然需要花費(fèi)更多的腦力去思考)。
data see; list='A,B,C,D'; run;%macro test(total,listing); data a; set see; %do i=1 %to &total; var&i=scan(&listing,&i,','); %end; run; %mend test;%test(4,list);和其他do loop一樣,存在do until 與do while,使用格式如下
%do %while(表達(dá)式); (先判斷再執(zhí)行)
需要循環(huán)的內(nèi)容;
%end;
%do %until(表達(dá)式); (先執(zhí)行再判斷)
需要循環(huán)的內(nèi)容;
%end;
五. if 條件語(yǔ)句
在macro中,我們同樣可以使用if-then 條件語(yǔ)句,使用格式如下
%if 條件 %then %do;
需要操作的內(nèi)容;
%end;
%else %do;
需要操作的內(nèi)容;
%end;
以上便是我在training階段所學(xué)macro入門(mén)部分,等以后進(jìn)組了學(xué)習(xí)更多再繼續(xù)更新。
總結(jié)
以上是生活随笔為你收集整理的sas macro 入门的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 在线摩尔斯密码加密解密工具
- 下一篇: XILINX 7系列FPGA与SOC产品