从数据步骤内的文本文件加载SAS代码

从数据步骤内的文本文件加载SAS代码,sas,Sas,假设我有一个SAS数据步骤,其中我从其平均值中减去每个观察值(比如,我只有变量X): data tmp; set tmp; x = x-2; run; 假设mean并不总是2,我还有另一个脚本,它创建了一个文本文件,其中包含: x = x-2; 现在,问题是,有没有办法让我得到这样的东西: data tmp; set tmp; load text_file; run; 执行与第一个数据步骤相同的操作?换句话说,我想要一个依赖于使用文件内容的解决方案(如我在数据步骤中所示或在

假设我有一个SAS数据步骤,其中我从其平均值中减去每个观察值(比如,我只有变量
X
):

data tmp;
  set tmp;
  x = x-2;
run;
假设mean并不总是
2
,我还有另一个脚本,它创建了一个文本文件,其中包含:

x = x-2;
现在,问题是,有没有办法让我得到这样的东西:

data tmp;
  set tmp;
  load text_file;
run;

执行与第一个数据步骤相同的操作?换句话说,我想要一个依赖于使用文件内容的解决方案(如我在数据步骤中所示或在宏中所示)。

%INCLUDE将执行您想要的操作。假设您的文本文件“c:\mycode.sas”有以下行

x=x-2;
然后你可以这样做:

data tmp;
set tmp;
%include "c:\mycode.sas";
run;
我注意到这是一个非常非常糟糕的方法,但这是你要求的

如果我想从x中减去x的平均值(标准化数据),我要么使用PROC STDIZE,要么这样做:

proc means data=tmp;
var x;
output out=x_mean mean=x_bar;
run;

data want;
set tmp;
if _n_ = 1 then set x_mean;
x=x-x_bar;
run;
或者,程序标准(包括在SAS/STAT中):


谢谢你,乔!伟大的回答;正是我想要的。基本上,文本文件没有“x=x-2”那么简单,它是一个动态生成的SAS代码,因此在这种情况下这些程序可能对我不起作用,但是,对于std,我非常喜欢您的解决方案,并且肯定会使用它。
proc stdize data=tmp out=want_std method=mean;
var x;
run;