257:macro base(五)---宏參數(shù)

宏參數(shù)被用來(lái)傳遞傳遞值或者文本字符串給宏誉裆,能讓你不用%let就能定義宏變量。

宏參數(shù)有兩種類型:一種是positional parameter,另一種是keyword(named) parameter。

一:位置參數(shù)(positional parameter)

位置參數(shù)的名稱來(lái)源于這樣一個(gè)事實(shí):即它們是使用%Macro語(yǔ)句上的特定位置來(lái)定義的腻惠。當(dāng)調(diào)用宏時(shí)衷恭,該值將通過(guò)宏調(diào)用中與宏定義中相同的對(duì)應(yīng)位置傳遞.位置參數(shù)比關(guān)鍵詞參數(shù)有一點(diǎn)點(diǎn)好處,只是少一點(diǎn)點(diǎn)內(nèi)存校套。

%macro look(dsn,obs);
title "data set &dsn";
proc contents data=&dsn;
run;
title2 "first &obs observations";
proc print data=&dsn (obs=&obs);
run;
%mend look;

在調(diào)用帶有參數(shù)的宏時(shí),在宏名稱后面是一個(gè)用逗號(hào)分隔的參數(shù)值列表牧抵,這些參數(shù)值由圓括號(hào)括起來(lái)笛匙。

比如下面這樣

%look(sashelp.cars,10)

你不必給所有的位置參數(shù)一個(gè)值,比如下面這樣,但是不一定會(huì)產(chǎn)生可用的代碼
%look() ---報(bào)錯(cuò)
%look(sashelp.cars) ---報(bào)錯(cuò)

%look(,10)---報(bào)錯(cuò)

比如我們調(diào)用這個(gè)%look(,10)犀变,對(duì)于為空的參數(shù)妹孙,SAS會(huì)解析成空字符串(null string),所以%look(,10)會(huì)解析成

title "data set ";
proc contents data=;
run;
title2 "first 10 observations";
proc print data= (obs=10);
run;
這段程序包含語(yǔ)法錯(cuò)誤,所以肯定會(huì)報(bào)錯(cuò)获枝,也不會(huì)運(yùn)行蠢正。

二:關(guān)鍵詞參數(shù)(keyword parameter)

關(guān)鍵詞參數(shù)可以用在任何位置,也可以設(shè)置默認(rèn)的值。形式是有一個(gè)等于號(hào)省店。
%macro look(dsn=,obs=);
title "data set &dsn";
proc contents data=&dsn;
run;
title2 "first &obs observations";
proc print data=&dsn (obs=&obs);
run;
%mend look;

%look(obs=10,dsn=sashelp.cars)

注意到在宏里面是我是把宏參數(shù)dsn放在前面嚣崭,但是調(diào)用的時(shí)候我給他們換了一下位置,這樣是不會(huì)報(bào)錯(cuò)的懦傍,但是還是建議按順序來(lái)雹舀。

如果你需要多次調(diào)用一個(gè)宏,且某個(gè)宏參數(shù)的值不變的話粗俱,你可以直接在宏里面提前把值寫(xiě)上说榆,比如這樣:

%macro look(dsn=sashelp.cars,obs=);
title "data set &dsn";
proc contents data=&dsn;
run;
title2 "first &obs observations";
proc print data=&dsn (obs=&obs);
run;
%mend look;

%look(obs=10)
%look(obs=15)
%look(obs=20)
%look(dsn=sashelp.class,obs=5);/這時(shí)候會(huì)替換成class數(shù)據(jù)集/

需要注意的是,如果你的位置參數(shù)和關(guān)鍵詞參數(shù)用法混用的話寸认,要嚴(yán)格按照所列的順序賦值签财,下面這段程序肯定會(huì)報(bào)錯(cuò)

%macro look(dsn,obs=);
title "data set &dsn";
proc contents data=&dsn;
run;
title2 "first &obs observations";
proc print data=&dsn (obs=&obs);
run;
%mend look;

%look(obs=10,sashelp.cars)

上面就是關(guān)于宏參數(shù)需要注意的一些點(diǎn),當(dāng)然還有一些好的編程習(xí)慣偏塞,假設(shè)你的宏里面宏參數(shù)有很多個(gè):

1)將橫向結(jié)構(gòu)轉(zhuǎn)換成縱向結(jié)構(gòu)
2)參數(shù)能簡(jiǎn)要描述輸入的內(nèi)容
3)當(dāng)多次調(diào)用宏都是用默認(rèn)值的時(shí)候唱蒸,可以把默認(rèn)值放到宏參數(shù)中
4)對(duì)每一個(gè)參數(shù)最好有對(duì)應(yīng)的注釋。

%look(dsn=,

        var1=Y,

        var2=,

        var3=N,

        obs=,

        dsout=)烛愧;

/******************************************
dsn:輸入數(shù)據(jù)集

var1:XXXXXXXXXXX;

var2:XXXXXXXXXXX;

var3:XXXXXXXXXXX;

obs:XXXXXXXXXXX;

dsout:輸出數(shù)據(jù)集;

*******************************************/

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末油宜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子怜姿,更是在濱河造成了極大的恐慌慎冤,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件沧卢,死亡現(xiàn)場(chǎng)離奇詭異蚁堤,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)但狭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)披诗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)撬即,“玉大人,你說(shuō)我怎么就攤上這事呈队“保” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,474評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵宪摧,是天一觀的道長(zhǎng)粒竖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)几于,這世上最難降的妖魔是什么蕊苗? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,881評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮沿彭,結(jié)果婚禮上朽砰,老公的妹妹穿的比我還像新娘。我一直安慰自己喉刘,他們只是感情好瞧柔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,902評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著饱搏,像睡著了一般非剃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上推沸,一...
    開(kāi)封第一講書(shū)人閱讀 51,698評(píng)論 1 305
  • 那天备绽,我揣著相機(jī)與錄音,去河邊找鬼鬓催。 笑死肺素,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的宇驾。 我是一名探鬼主播倍靡,決...
    沈念sama閱讀 40,418評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼课舍!你這毒婦竟也來(lái)了塌西?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,332評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤筝尾,失蹤者是張志新(化名)和其女友劉穎捡需,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體筹淫,經(jīng)...
    沈念sama閱讀 45,796評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡站辉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,968評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饰剥。...
    茶點(diǎn)故事閱讀 40,110評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡殊霞,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汰蓉,到底是詐尸還是另有隱情绷蹲,我是刑警寧澤,帶...
    沈念sama閱讀 35,792評(píng)論 5 346
  • 正文 年R本政府宣布古沥,位于F島的核電站瘸右,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏岩齿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,455評(píng)論 3 331
  • 文/蒙蒙 一苞俘、第九天 我趴在偏房一處隱蔽的房頂上張望盹沈。 院中可真熱鬧,春花似錦吃谣、人聲如沸乞封。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,003評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肃晚。三九已至,卻和暖如春仔戈,著一層夾襖步出監(jiān)牢的瞬間关串,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,130評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工监徘, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留晋修,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,348評(píng)論 3 373
  • 正文 我出身青樓凰盔,卻偏偏與公主長(zhǎng)得像墓卦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子户敬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,047評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • # -------------------------------------------------------...
    woaishangxue閱讀 877評(píng)論 0 0
  • #### Section 4: demo code for xgboost (Extreme GB) #### #...
    TXJY閱讀 654評(píng)論 0 0
  • 現(xiàn)有多個(gè)數(shù)據(jù)集落剪,表結(jié)構(gòu)都是一樣的,現(xiàn)在需要找出這些數(shù)據(jù)集有多少數(shù)據(jù)量是重復(fù)的尿庐。假設(shè)有4個(gè)數(shù)據(jù)集忠怖,找出這4個(gè)數(shù)據(jù)集的...
    乘物以游心閱讀 1,949評(píng)論 0 0
  • 變量名 名字的長(zhǎng)度要小于等于 32 個(gè)字節(jié)。(一個(gè)字母 1 個(gè)字節(jié)屁倔, 一個(gè)漢字 2 個(gè)字節(jié))以字母或下劃線開(kāi)頭脑又。可...
    ShawnDuan閱讀 1,509評(píng)論 0 0
  • 最近真的感覺(jué)身心疲憊,一方面感覺(jué)來(lái)自公司不斷增加的壓力问麸,這個(gè)就不多說(shuō)了往衷;另一方面就是各個(gè)項(xiàng)目的不斷切換和單個(gè)項(xiàng)目的...
    SASPRO的打工人生活閱讀 544評(píng)論 0 6