为此,您需要将该值提取到宏变量中。您不能以这种方式直接使用数据步骤变量,因为 PROC EXPORT 不与数据步骤交互(即使它在某些情况下使用它)。
一个问题是,当您说“变量的值”时,您是什么意思?如果您的意思是“一行上一个变量的值”,即使它实际上存在于所有行上,您也可以很容易地做到这一点:
proc sql;
select max(var1) into :var1
from work.a
;
quit;
然后你有一个&VAR1. 宏变量可以插入到你的导出中:
PROC EXPORT DATA= WORK.A
OUTFILE= "c:\folders\filename&VAR1..csv"
DBMS=CSV LABEL REPLACE;
PUTNAMES=YES;
RUN;
注意终止宏变量的额外.。
现在,如果此值更改,并且您希望为每组行创建一个新文件,并为var1 提供一个公共值,那么情况就不同了。您不能直接在 proc export 中执行此操作,但由于您正在编写 CSV,您可以自己执行此操作!
data _null_;
set work.a;
length file_w_Var1 $255;
file_w_var1 = cats('c:\folders\filename',VAR1,'.csv');
file a filevar=file_w_var1 dlm=',' dsd;
put
var1
var2 $
var3
var4
var5 $
var6
;
run;
(显然使用真实的变量名和适当的 $ 等等)。
您可以进行导出,将导出代码从日志复制到程序文件中,然后像我在上面所做的那样更改file 语句(并添加该变量代码的创建)以使其工作.为此,您必须按var1 对其进行排序(如果未排序,至少按其分组)。
filevar 选项的作用是告诉 SAS 查看一个变量并将其用于文件位置,而不是文件语句中的任何内容 - 所以那里有一个虚拟的 a(与名称无关您的数据集)。每次该值更改时,它都会创建一个新文件。