在SAS中用变量命名导出的文件

时间:2019-06-27 20:45:20

标签: sas

我希望通过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。 谢谢

1 个答案:

答案 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(与您的数据集名称无关)。每当值更改时,它将创建一个新文件。