SAS編程:Proc SQL生成宏變量時INTO子句的使用

在日常的編程中咪笑,為了方便調(diào)用某些值,一個簡便的方法是將這些值賦值到宏變量中娄涩。給宏變量賦值窗怒,Data步和Proc步都能可以實現(xiàn),不過從操作靈活性上講钝满,Proc步要更勝一籌兜粘。Proc步生成宏變量就需要用到INTO子句,下面來具體介紹一下INTO子句如何使用弯蚜。

INTO子句的作用是孔轴,將PROC SQL生成的值賦值給宏變量

語法

我們來看一下INTO子句的具體語法:

INTO : macro-variable-specification-1 <, : macro-variable-specification-2 ...>

macro-variable-specification碎捺,宏變量的說明路鹰,是要創(chuàng)建的一個或多個宏變量的名稱,并且在每個宏變量名稱前都需要添加一個冒號:收厨。如果不添加冒號晋柱,程序運行時會報錯。

macro-variable-specification的形式

INTO語句宏變量的命名有3種形式:

  1. into : macro-variable(指定一個或多個宏變量)
  2. into : macro-variable-1 ? : macro-variable-n <NOTRIM> (指定一個宏變量序列)
  3. into : macro-variable SEPARATED BY 'characters ' <NOTRIM> (指定一個宏變量來保存一列的所有值)

下面我來介紹每種方式的語法和具體的代碼示例诵叁,使用的示例數(shù)據(jù)集是SASHELP.BASEBALL, 為了方便演示雁竞,我只選取數(shù)據(jù)集前4行的記錄,先看一下數(shù)據(jù)集具體的內(nèi)容:

data baseball;
  set sashelp.baseball (obs =4);
run;
Baseball

下面具體看每一種命名方式:

1拧额、指定一個或多個宏變量(into : macro-variable

使用這種命名方式碑诉,賦值給宏變量的值的前置和后置空格都會被保留。如果想要移除前置或后置空格侥锦,需要自行對所引用的值進行函數(shù)處理进栽。如果要命名多個宏變量,各個宏變量名稱之前都需要添加冒號:恭垦,并且名稱之前都要有逗號,間隔快毛。同時格嗅,也要注意,這種命名方式只是選取變量的一條記錄賦值給宏變量唠帝。如果所選變量有多條記錄屯掖,并且不經(jīng)過篩選的話,默認是選取第一條記錄進行賦值没隘。

賦值代碼示例:

proc sql noprint;
 select name, team
   into :name, :team
   from baseball;
quit;

%put &name;
%put &team;

宏變量的值如下:


&name
&team

從結(jié)果中懂扼,我們可以看到,變量name右蒲、team的第一條記錄都被賦值到宏變量中了阀湿。

2、指定一個宏變量序列(into : macro-variable-1 ? : macro-variable-n <NOTRIM>

使用這種命名方式瑰妄,賦值給宏變量的值的前置和后置空格都會被自動移除陷嘴。如果項目要保留值的前置和后置空格,就需要在每個元素后面添加NOTRIM選項间坐。如果有多個元素存在灾挨,只需要對需要保留空格的那個元素使用NOTRIM選項。序列中有多少數(shù)目的宏變量名竹宋,就會有同樣數(shù)目的變量記錄賦值到對應(yīng)宏變量中劳澄。

賦值代碼示例:

proc sql noprint;
 select name, team
   into :name1- :name4 notrim, :team1 - :team3
   from baseball;
quit;

考慮到有多個宏變量,我們利用SAS字典的值來查看宏變量的值:

%symdel name team;

proc sql noprint;
  create table test as
  select *
  from dictionary.macros
  where index(name, "NAME") or index(name, "TEAM")
  ;
quit;

輸出結(jié)果如下:


Output2

當(dāng)用宏變量序列來保存變量的值時蜈七,可以保存多個變量值秒拔。

3、指定一個宏變量來保存一列的所有值(into : macro-variable SEPARATED BY 'characters ' <NOTRIM>

使用這種命名方式飒硅,列表中的值將會被一個或多個字符分隔砂缩。賦值給宏變量的值的前置和后置空格都會被自動移除。如果項目要保留值的前置和后置空格三娩,也還是需要使用NOTRIM選項庵芭。

這種命名方式便于建立一項事物的集合,比如雀监,實現(xiàn)變量可能取值的匯總:

proc sql noprint;
  select distinct name
    into :names separated by ','
    from baseball;
quit;

%put &names;

宏變量的值如下:


Output 3.1

再比如双吆,建立批量命名語句:

proc sql noprint;
  select strip(name)||" = "||strip(name)||"_new" into :rename separated by " "
  from dictionary.columns
  where libname="WORK" and memname="BASEBALL";
quit;

%put &rename.;

data baseball_new;
  set baseball;
  rename &rename.;
run;
Output 3.2.1
Output 3.2.2

再比如,只保留數(shù)據(jù)集中字符型變量:

proc sql noprint;
  select name into :keepnames separated by " "
  from dictionary.columns
  where libname="WORK" and memname="BASEBALL" and type="char";
quit;

%put &keepnames.;

data baseball1;
  set baseball;
  keep &keepnames.;
run;
Output 3.3.1
Output3.3.2

熟悉INTO子句的用法后会前,可以根據(jù)根據(jù)任務(wù)的需求自由發(fā)揮好乐。

以上。

若有疑問回官,歡迎評論區(qū)交流曹宴!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末搂橙,一起剝皮案震驚了整個濱河市歉提,隨后出現(xiàn)的幾起案子笛坦,更是在濱河造成了極大的恐慌,老刑警劉巖苔巨,帶你破解...
    沈念sama閱讀 221,576評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件版扩,死亡現(xiàn)場離奇詭異,居然都是意外死亡侄泽,警方通過查閱死者的電腦和手機礁芦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,515評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悼尾,“玉大人柿扣,你說我怎么就攤上這事」胛海” “怎么了载佳?”我有些...
    開封第一講書人閱讀 168,017評論 0 360
  • 文/不壞的土叔 我叫張陵供璧,是天一觀的道長。 經(jīng)常有香客問我,道長卖怜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,626評論 1 296
  • 正文 為了忘掉前任番甩,我火速辦了婚禮赡麦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘娩怎。我一直安慰自己搔课,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,625評論 6 397
  • 文/花漫 我一把揭開白布峦树。 她就那樣靜靜地躺著辣辫,像睡著了一般。 火紅的嫁衣襯著肌膚如雪魁巩。 梳的紋絲不亂的頭發(fā)上急灭,一...
    開封第一講書人閱讀 52,255評論 1 308
  • 那天,我揣著相機與錄音谷遂,去河邊找鬼葬馋。 笑死,一個胖子當(dāng)著我的面吹牛肾扰,可吹牛的內(nèi)容都是我干的畴嘶。 我是一名探鬼主播,決...
    沈念sama閱讀 40,825評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼集晚,長吁一口氣:“原來是場噩夢啊……” “哼窗悯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起偷拔,我...
    開封第一講書人閱讀 39,729評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蒋院,失蹤者是張志新(化名)和其女友劉穎亏钩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體欺旧,經(jīng)...
    沈念sama閱讀 46,271評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡姑丑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,363評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辞友。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栅哀。...
    茶點故事閱讀 40,498評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖称龙,靈堂內(nèi)的尸體忽然破棺而出留拾,到底是詐尸還是另有隱情,我是刑警寧澤鲫尊,帶...
    沈念sama閱讀 36,183評論 5 350
  • 正文 年R本政府宣布间驮,位于F島的核電站,受9級特大地震影響马昨,放射性物質(zhì)發(fā)生泄漏竞帽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,867評論 3 333
  • 文/蒙蒙 一鸿捧、第九天 我趴在偏房一處隱蔽的房頂上張望屹篓。 院中可真熱鬧,春花似錦匙奴、人聲如沸堆巧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,338評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谍肤。三九已至,卻和暖如春哗伯,著一層夾襖步出監(jiān)牢的瞬間荒揣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,458評論 1 272
  • 我被黑心中介騙來泰國打工焊刹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留系任,地道東北人。 一個月前我還...
    沈念sama閱讀 48,906評論 3 376
  • 正文 我出身青樓虐块,卻偏偏與公主長得像俩滥,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子贺奠,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,507評論 2 359

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

  • 今天感恩節(jié)哎霜旧,感謝一直在我身邊的親朋好友。感恩相遇儡率!感恩不離不棄挂据。 中午開了第一次的黨會航背,身份的轉(zhuǎn)變要...
    迷月閃星情閱讀 10,569評論 0 11
  • 彩排完,天已黑
    劉凱書法閱讀 4,223評論 1 3
  • 表情是什么棱貌,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息箕肃。高興了當(dāng)然就笑了婚脱,難過就哭了。兩者是相互影響密不可...
    Persistenc_6aea閱讀 125,309評論 2 7