我正在尝试使用PROC SQL从Macro变量创建SAS表:
我有一个保存在宏变量中的值列表: %let l = 1,2,3;
我想创建一个SAS表,其中包含一个包含宏变量值的列: 1 2 3
非常感谢你的帮助。 此致 Abdeljalil
答案 0 :(得分:0)
你应该努力自己解决这个问题。
将值放入字符串中,解析字符串并输出您想要的值。
%let l=1,2,3;
data want;
str = "&l";
do i=1 to countw(str,',');
value = input(scan(str,i,","),best.);
output;
end;
/*drop other variables if you want*/
drop str i;
run;
答案 1 :(得分:0)
这样的东西?
%let age=%str(12,13,15);
proc sql;
select * from sashelp.class where age in (&age);
quit;
答案 2 :(得分:0)
您有一个包含名称列表的数据集,并且您希望将这些名称放入宏变量中供以后使用。只要宏变量不超过64K限制,这将起作用。 如果值达到此限制,则可以使用宏处理从数据集中检索名称。由于宏定义没有64K限制,因此可以使用它为您创建列表。 在“完整代码”选项卡上的示例代码中,我们有一个名称列表,我们希望在INPUT语句中使用这些名称以及给定的信息。此示例演示如何创建列表而无需使用宏变量。
data one;
input name $;
datalines;
abc
def
ghi
;
run;
%macro test;
%let dsid=%sysfunc(open(one));
%let cnt=%sysfunc(attrn(&dsid,nobs));
%do i=1 %to &cnt;
%let rc=%sysfunc(fetchobs(&dsid,&i));
%cmpres(%sysfunc(getvarc(&dsid,%sysfunc(varnum(&dsid,name))))) $4.
%end;
%let rc=%sysfunc(close(&dsid));
%mend test;
/** Using %PUT to see outcome **/
/** %test could be used on an INPUT statement **/
%put %test;