【问题标题】:Naming exported files with variable in SAS在 SAS 中使用变量命名导出的文件
【发布时间】:2019-06-27 20:45:20
【问题描述】:

我希望使用 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。 谢谢

【问题讨论】:

  • 当然可以使用宏变量&VAR1.。但是您使用的是什么类型的变量?标量?请扩展代码示例以显示变量的定义。

标签: sas


【解决方案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(与名称无关您的数据集)。每次该值更改时,它都会创建一个新文件。

【讨论】:

  • 我希望在一行上的变量值之后命名文件,因此您的代码的第一部分对我有用。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多