SAS 连接多个变量以创建数据驱动的宏语句

SAS Concatenate Multiple Variables to Create Data-Driven Macro Statements

为了让我的流程保持数据驱动,我尝试连接多个变量,用逗号分隔,以便最终将它们放入 PROC SQL 列表中以调用多个宏语句否则会使我的 SAS 程序混乱。

采用以下示例数据集:

DATA TEST;
  INPUT YEAR CONDITION $ QRTS . SAMPLE $;
  DATALINES;
  2008  MI  (1,2,3,4)   A
  2008  MI  (1,2,3,4)   B
  ;
RUN;

我想将这些变量连接在一起,再次用逗号分隔,并在前面添加 %APPEND 以创建一个巨大的宏语句列表。新的字符串变量,以及最终的宏语句,看起来像:

%APPEND(2008,MI,(1,2,3,4),A);

%APPEND(2008,MI,(1,2,3,4),B);

我使用以下方法编译均值和置信区间的字符串,我想它也会类似(我只是无法用我的数据弄清楚这些引号、逗号和竖线):

ci=compress(put(mean,7.2))||"("||compress(lo)||","|| compress(hi)||")";

一旦创建了这个长字符串变量,我就会 select 通过 PROC SQL 语句将这个变量变成一个长列表,如下所示:

PROC SQL;
    SELECT DISTINCT *NEW LONG STRING VARIABLE*
    INTO: MACROLIST SEPARATED BY ' '
    FROM TEST;
QUIT;

最终,运行 &MACROLIST. 将调用数百个宏语句将多个数据集附加到一个大型主数据集中。我很欣赏你的见解。

回答了我自己的问题。这就是我需要的:

DATA TEST1; SET TEST;
    STRING=COMPRESS(%NRSTR("%APPEND""("||COMPRESS(YEAR)||","||COMPRESS(CONDITION)||","|| COMPRESS(QRTS)||","|| COMPRESS(SAMPLE)||")"),"""");
RUN;

%APPEND 可以替换为任何创建的宏名称,因此这可能非常有用。