SAS:使用Put语句创建动态代码

时间:2013-06-28 02:20:41

标签: dynamic sas

我想使用PUT语句创建动态代码。根据SUGI 29(http://www2.sas.com/proceedings/sugi29/175-29.pdf)的这份文件,

put
"data XXXXX; "
/ 'infile "&datadir/&compid&filetype" missover ls=' tbla_fle
';' / 'input'
;

相当于运行

data onecomp ;
infile
"&datadir/&compid&filetype"
missover ls = 268 ;
input

但是,当我尝试类似于他们的示例时,PUT语句中包含的代码不会运行,而是写入SAS输出日志:

data _NULL_;
put // "data put_test;" / "b=2;" / "run;";
run;

In Output Log:

data put_test;
b=2;
run;     

我检查了SAS文档,似乎PUT仅用于“将行写入SAS日志,SAS输出窗口或最近指定的外部位置”文件声明。“它没有说它可以用来创建动态生成的代码。

我知道我必须遗漏一些东西,但我不确定是什么。我正在使用SAS Enterprise Guide 4.1。

谢谢!

1 个答案:

答案 0 :(得分:2)

我们的想法是使用put将生成的代码写入文件。然后,将%include文件放入SAS会话中以运行它。您缺少的是file语句和%include指令。

data _null_;
    file 'temp.sas'; /* redirects put to a file instead of the SAS log */
    put
      "data XXXXX; "
      / 'infile "&datadir/&compid&filetype" missover ls=' tbla_fle
      ';' / 'input'
    ;
run;

%include 'temp.sas';