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