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

Dynamic SAS:使用Put语句创建动态代码,dynamic,sas,Dynamic,Sas,我想使用PUT语句创建动态代码。根据SUGI 29()的本文件 相当于跑步 data onecomp ; infile "&datadir/&compid&filetype" missover ls = 268 ; input 但是,当我尝试与他们的示例类似的操作时,PUT语句中包含的代码不会运行,而是写入SAS输出日志: data _NULL_; put // "data put_test;" / "b=2;" / "run;"; run; In Output Lo

我想使用
PUT
语句创建动态代码。根据SUGI 29()的本文件

相当于跑步

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企业指南4.1


谢谢大家!

方法是使用
put
将生成的代码写入文件。然后,
%将该文件包含到SAS会话中以运行它。您缺少的是
文件
语句和
%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';
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';