最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

SAS Training Vol.6 你是不是也不想寫代碼?

2021-08-17 22:53 作者:陸震同學(xué)  | 我要投稿

你有沒有覺得,SAS 中的宏有一種 R 的元編程的感覺?

對于規(guī)律的、重復(fù)性的 code,懶人都不想多寫哪怕一行。要想省體力,就得花腦力。怎么減少重復(fù)性 programming?借助宏捷徑。

我們今天來接觸特定的幾個情景。

情景一:label

需要我們寫以下這么多可怕的 label statements:

咋辦?一行行地復(fù)制粘貼替換么?你也不愿意干!

要生成這樣一系列的帶有共同 prefix 的行標(biāo)識符標(biāo)簽,我們可以這樣偷懶:

%macro label(n);
? ?%do i= 1 %to &n;
? ? ? ?label condid&i= "condition ID&i";
? ?%end;
%mend label;
%label(20)

嘿嘿,只要在 data 步里加這個 macro,你就擺脫了最原始的復(fù)制粘貼,還是挺爽的吧?

情景二:%goto statement

明白地告訴你:現(xiàn)在我在同一個 folder 底下有四個文件,分別名為 cty_1、cty_2、cty_3 和 cty_4,這四個文件里面的 layout 都一樣。但是我就想讀里面的三個,不讀文件 cty_3,你咋整?是不是也要寫成下面這樣?

從今晚看了這篇推送開始,咱都有脾氣了,要和這些 say goodbye,偷懶一下:

%macro read;
? ?%do i= 1 %to 4;
? ? ? ?%if &i= 3 %then
? ? ? ? ? ?%goto leslie;
? ? ? ?
? ? ? ?data cty_&i;
? ? ? ? ? ?infile "D:\NESUG\CTY_&I";
? ? ? ? ? ?input id f96 f97 f98;
? ? ? ?run;
? ? ? ?
? ? ? ?%leslie: %end;
%mend read;

這里借助了 %goto statement,這 4 個中第三個我們想做 specific 處理,就可以這樣操作,讓它跳出數(shù)據(jù)讀取的循環(huán)之中。

是不是有懶人那味兒了?

情景三:symput routine、%eval、byte function

把情景二改一下:還是那四個文件,只不過我們想對應(yīng)地輸出三個分別名為 cty_A、cty_B 和 cty_D 的文件,還是任性地不想讀第三個文件并輸出。

%macro read;
? ?%do i= 1 %to 4;
? ? ? ?%if &i= 3 %then
? ? ? ? ? ?%goto leslie;
? ? ? ?
? ? ? ?data cty_&i;
? ? ? ? ? ?infile "D:\NESUG\CTY_&I";
? ? ? ? ? ?input id f96 f97 f98;
? ? ? ? ? ?call symput("N", byte(%eval(&i + 64)));
? ? ? ?run;
? ? ? ?data cty_&N;
? ? ? ? ? ?set cty_&i;
? ? ? ?run;
? ? ? ?
? ? ? ?%leslie: %end;
%mend read;

這里 symput routine 是為了動態(tài)地生成 macro variable N。另外,之所以加上 64,是因為利用 byte funciton 輸出 A 時,A 在 ASCII 編碼系統(tǒng)里排第 65 位。

這種批量化地操作是不是省時省力?

情景四:flag variable

我們在處理 raw data 時,經(jīng)常需要根據(jù)一些 variables 的取值來給每個人建立一個 flag variable,來標(biāo)識每個 subject 某種屬性的類別情況,這個時候,macro 就顯得非常好用了。

假設(shè)我們有這樣的 condition,你要不要這樣一個條件一個條件地篩,最后建立起一個 error1?

答案很顯然,你也頭暈。

%macro mdx(ndx, code);
? ?%do i= 1 %to &ndx-1;
? ? ? ?dx&i= "&code" or
? ?%end;
? ?dx&ndx= "&code"
%mend mdx;
if %mdx(15, E8710) then error1= 1;

看到這,相信你對宏已經(jīng)有了一個初步的了解。


SAS Training Vol.6 你是不是也不想寫代碼?的評論 (共 條)

分享到微博請遵守國家法律
曲水县| 改则县| 定结县| 开鲁县| 双城市| 曲阜市| 许昌市| 岫岩| 沐川县| 枞阳县| 浮山县| 岱山县| 洛阳市| 台山市| 高淳县| 英德市| 玛曲县| 陆丰市| 成安县| 鄂伦春自治旗| 昂仁县| 安丘市| 额敏县| 芒康县| 龙江县| 双鸭山市| 咸宁市| 永城市| 木里| 襄樊市| 泽库县| 厦门市| 墨脱县| 宕昌县| 太康县| 六安市| 武义县| 五家渠市| 永德县| 玉树县| 武乡县|