DATAステップで生成された値を、マクロ変数に割り当てます。
種類: | DATAステップCALLルーチン |
参照項目: | SYMGET関数および CALL SYMPUTXルーチン |
次の項目のいずれかです。
testing
をマクロ変数NEWに割り当てるには、次のステートメントをサブミットします。 call symput('new','testing');
data team1; input position : $8. player : $12.; call symput(position,player); datalines; shortstp Ann pitcher Tom frstbase Bill ;
data team2; input position : $12. player $12.; call symput('POS'||left(_n_), position); datalines; shortstp Ann pitcher Tom frstbase Bill ;
割り当てる値。次のいずれかを指定できます。
testing
をマクロ変数NEWに割り当てています。 call symput('new','testing');
July 4,1997
という値が割り当てられています。 data c; input holiday mmddyy.; call symput('holdate',trim(left(put(holiday,worddate.)))); datalines; 070497 ; run;
%
または&
を含み、ラベルに置換されます)
data x; x='December'; call symput('var',x); proc print; title "Report for &var"; run;
x
の後ろに7つの空白を加え、それをCHAR1の値として割り当てます。これらの空白を除去するには、2番目のSYMPUTステートメントに示すように、TRIM関数を使用します。data char1; input c $; call symput('char1',c); call symput('char2',trim(c)); datalines; x ; run; %put char1 = ***&char1***; %put char2 = ***&char2***;このプログラムを実行すると、SASログに次のメッセージが書き込まれます。
char1 = ***x *** char2 = ***x***
data _null_; x=1; call symput('num1',x); call symput('num2',left(x)); call symput('num3',trim(left(put(x,8.)))); /*preferred technique*/ run; %put num1 = ***&num1***; %put num2 = ***&num2***; %put num3 = ***&num3***;
num1 = *** 1*** num2 = ***1 *** num3 = ***1***
data dusty; input dept $ name $ salary @@; datalines; bedding Watlee 18000 bedding Ives 16000 bedding Parker 9000 bedding George 8000 bedding Joiner 8000 carpet Keller 20000 carpet Ray 12000 carpet Jones 9000 gifts Johnston 8000 gifts Matthew 19000 kitchen White 8000 kitchen Banks 14000 kitchen Marks 9000 kitchen Cannon 15000 tv Jones 9000 tv Smith 8000 tv Rogers 15000 tv Morse 16000 ; proc means noprint; class dept; var salary; output out=stats sum=s_sal; run; data _null_; set stats; if _n_=1 then call symput('s_tot',trim(left(s_sal))); else call symput('s'||dept,trim(left(s_sal))); run; %put _user_;
GLOBAL SCARPET 41000 GLOBAL SKITCHEN 46000 GLOBAL STV 48000 GLOBAL SGIFTS 27000 GLOBAL SBEDDING 59000 GLOBAL S_TOT 221000