我希望通过PROC EXPORT将数据从SAS导出到.csv。我想根据变量的值更改文件名。有可能吗?
PROC EXPORT DATA= WORK.A
OUTFILE= "c:\folders\filenameVAR1.csv"
DBMS=CSV LABEL REPLACE;
PUTNAMES=YES;
RUN;
我想在文件名的末尾添加变量(例如VAR1)的值,如上所示。我想要一个名为filenameVAR1.csv的文件,然后在更改变量时将其命名为filenameVAR2.csv。 谢谢
答案 0 :(得分:1)
为此,您需要将该值提取到宏变量中。您不能以这种方式直接使用数据步骤变量,因为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
(与您的数据集名称无关)。每当值更改时,它将创建一个新文件。