从SAS宏(值列表)获取数据到SAS表(列)

时间:2018-02-26 15:21:51

标签: sql macros sas

我正在尝试使用PROC SQL从Macro变量创建SAS表:

我有一个保存在宏变量中的值列表: %let l = 1,2,3;

我想创建一个SAS表,其中包含一个包含宏变量值的列: 1 2 3

非常感谢你的帮助。 此致 Abdeljalil

3 个答案:

答案 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;      

来源:http://support.sas.com/kb/39/605.html