为 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));