SAS如果宏变量等于字符串,则为文件名
我有一个关于if/then结构和(过度)编写文件的基本问题 My&name var设置为name_b,但aa.js总是被覆盖,而bb.js总是被覆盖SAS如果宏变量等于字符串,则为文件名,sas,datastep,Sas,Datastep,我有一个关于if/then结构和(过度)编写文件的基本问题 My&name var设置为name_b,但aa.js总是被覆盖,而bb.js总是被覆盖 data _null_; if "&name" = "name_a" then do; filename cd_file '\\path\aa.js'; end; else if "&name" = "name_b" then do; filename cd_file '\\path\bb.js'; end; run;
data _null_;
if "&name" = "name_a" then do;
filename cd_file '\\path\aa.js';
end;
else if "&name" = "name_b" then do;
filename cd_file '\\path\bb.js';
end;
run;
我做错了什么?
filename
是一个全局语句,不应包装在数据步骤中
您可以改用宏逻辑-例如:
%macro example();
%let name=name_a; /* as appropriate */
%if &name = name_a %then %do;
filename cd_file '\\path\aa.js';
%end;
%else %if &name = name_b %then %do;
filename cd_file '\\path\bb.js';
%end;
%mend;
FILENAME语句是不可执行的,因此它们将在编译数据步骤时发生。因此,当IF语句运行时,两个FILENAME语句都已执行 您可以改用FILENAME()函数 运行此示例以查看是否使用FILENAME()函数使赋值有条件
%let name=name_a;
%let path=%sysfunc(pathname(work));
data _null_;
if "&name" = "name_a" then do;
filename cd_file "&path/aa.js";
end;
else if "&name" = "name_b" then do;
filename cd_file "&path/bb.js";
end;
run;
%put CD_FILE -> %scan(%sysfunc(pathname(cd_file)),-1,\/);
data _null_;
if "&name" = "name_a" then do;
rc=filename('cd_file',"&path/aa.js");
end;
else if "&name" = "name_b" then do;
rc=filename('cd_file',"&path/bb.js");
end;
run;
%put CD_FILE -> %scan(%sysfunc(pathname(cd_file)),-1,\/);