我的数据步骤如下。
%macro do();
select temp into :templist separated by "|" from Filenames ;
select temp1 into :templist1 separated by "|" from Filenames ;
%do i = 1 %to &count.;
data sub;
set sub;
temp =%scan(&templist,&i,|);
temp2 =%scan(&templist1,&i,|);
%end
run;
proc append base= master data= sub;
run;
%end;
%mend;
我想创建两个新变量temp和temp2,并将它们设置为宏变量值。我知道如何反过来,也就是说,在数据步骤中创建一个宏变量,但我想知道如何在数据步骤中创建一个新变量并将该变量设置为宏变量的值。
答案 0 :(得分:4)
如果我做对了,你想创建一个包含两个变量temp
和temp2
的新数据集,这样第i行就包含了宏变量的第i个元素&templist
和{ {1}}。
然后,你可以这样做:
&templist1
您不需要将整个DATA步骤放入宏循环 - 仅指定您指定变量的行。顺便说一下,你本身不能使用%let count=3;
%let templist=a|b|c;
%let templist1=x|y|z;
%macro loop;
%do i = 1 %to &count.;
temp ="%scan(&templist,&i,|)";
temp2 ="%scan(&templist1,&i,|)";
output;
%end;
%mend loop;
data want;
%loop
run;
- 只能在宏内部使用。
请注意,%DO-loop
应该是双引号,这样当宏代码执行并创建开放代码时,在赋值语句的右侧
%SCAN
和
temp ="%scan(&templist,&i,|)";
会出现字符表达式(temp2 ="%scan(&templist1,&i,|)";
,"a"
等,而不是"b"
,a
等等。