为 SAS 中的 saving/naming 个数据集解析宏变量
resolve macro variables for saving/naming a dataset in SAS
我在使用宏变量将数据集保存到所需目录时遇到问题。
基本上,我想根据&var和&age的值将数据集“_est”保存到库"sret"。我写了下面的代码:
%let var=k;
%let age=2;
...
...
data sret.est_&var&age._b3;
set _est;
run;
我想要的是一个名为"est_k2_b3.sas7bdat" in "sret"的数据集。但是代码给我的是保存在我想要的文件夹中的数据集 "est_k2.sas7bdat" 和工作库中的另一个数据集“_b3”。两个数据集是相同的。我很困惑如何解决这个问题。
正如 itzy 所指出的,您在“2”之后有一个 space 将您的数据集名称一分为二。
我可以通过调用 symput 来复制仅定义宏变量 age
的问题:
data _null_;
age='2 ';
call symput('age',age);
run;
如果是这种情况,您可以通过使用 strip()
、使用 call symputx()
(与数字一起使用)或重新删除数据步骤中的 space 来解决它- 在数据步骤后使用 %let
声明您的变量,这会自动删除 spaces:
%let age= &age.;
有一个非常相似的问题。在您使用 strip() 之前,会以某种方式添加 space。下面是示例。
data test;
input numdays;
datalines;
31
;
%macro monthly(months);
%let count=%sysfunc(countw(&months.));
%do i=1 %to &count.;
%let value=%qscan(&months.,&i,%str(,));
%let month=%sysfunc(strip(&value.));
%put &value.;
%put &month.;
data value_&value.;
set test;
run;
data month_&month.;
set test;
run;
%end;
%mend;
%monthly(%str(oct,jan));
我在使用宏变量将数据集保存到所需目录时遇到问题。
基本上,我想根据&var和&age的值将数据集“_est”保存到库"sret"。我写了下面的代码:
%let var=k;
%let age=2;
...
...
data sret.est_&var&age._b3;
set _est;
run;
我想要的是一个名为"est_k2_b3.sas7bdat" in "sret"的数据集。但是代码给我的是保存在我想要的文件夹中的数据集 "est_k2.sas7bdat" 和工作库中的另一个数据集“_b3”。两个数据集是相同的。我很困惑如何解决这个问题。
正如 itzy 所指出的,您在“2”之后有一个 space 将您的数据集名称一分为二。
我可以通过调用 symput 来复制仅定义宏变量 age
的问题:
data _null_;
age='2 ';
call symput('age',age);
run;
如果是这种情况,您可以通过使用 strip()
、使用 call symputx()
(与数字一起使用)或重新删除数据步骤中的 space 来解决它- 在数据步骤后使用 %let
声明您的变量,这会自动删除 spaces:
%let age= &age.;
有一个非常相似的问题。在您使用 strip() 之前,会以某种方式添加 space。下面是示例。
data test;
input numdays;
datalines;
31
;
%macro monthly(months);
%let count=%sysfunc(countw(&months.));
%do i=1 %to &count.;
%let value=%qscan(&months.,&i,%str(,));
%let month=%sysfunc(strip(&value.));
%put &value.;
%put &month.;
data value_&value.;
set test;
run;
data month_&month.;
set test;
run;
%end;
%mend;
%monthly(%str(oct,jan));