SAS catx 函数删除空格

SAS catx function removes spaces

我有一个包含 1 列和 n 行的数据集,如下所示:

数据集 1:

Column1
--------
AAA AAA
BBB BBB
CCC CCC
DDD DDD
EEE EEE

我想从这些数据中得到 1 行,例如:

"AAA AAA"n "BBB BBB"n "CCC CCC"n "DDD DDD"n "EEE EEE"n

我会用宏来做这个。

我用过类似catx的功能。但是该函数从数据中删除了空格..

我像这样使用 do 循环 :

 .
 .
 .
 .
data _NULL_;
          if &I^=1 then do;
            frstclmn=&frstclmn||""""||"&clmn"||""""||"n ";
        end;
        run;
 .
 .
 .

但我无法在 do lop in data 语句中将变量与自身一起赋值。

我该怎么办?谢谢

编辑:

%MACRO result;
        data _NULL_;
          set &LIB_NAME..column_list;
          retain namelist;
          length namelist 00;
            namelist=catx(' ',namelist,cats('"',name,'"n'));
        run;

---how can I use "namelist" variable here ? out of data statement.---

%MEND result;

这段代码运行完美。现在我想从这个数据语句中使用这个名单变量。如果我这样打印 %put &namelist=;它在宏中显示错误的结果。我想在宏其他语句中使用这个变量结果。

我不清楚你想要什么输出。也许这会给你一些提示。

data names;
   input name .;
   cards;
AAA AAA
BBB BBB
CCC CCC
DDD DDD
EEE EEE
;;;;
   run;
proc sql noprint;
   select nliteral(name) into :namelist separated by ' ' from names;
   quit;
   run;
%put NOTE: &=namelist;

NOTE: NAMELIST="AAA AAA"N "BBB BBB"N "CCC CCC"N "DDD DDD"N "EEE EEE"N

上面显示的 sql 方法 data _null_ 是更好的方法,但如果您要在数据步骤中执行此操作,请使用 ' ' 作为分隔符。

    data _NULL_;
      set sashelp.class;
      retain namelist;
      length namelist 0;
      namelist=catx(' ',namelist,cats('"',name,'"n'));
      put namelist=;
    run;

当然你可以使用 quotenliteral,两者都可以达到更好的效果。

    data _NULL_;
      set sashelp.class;
      retain namelist;
      length namelist 0;
      namelist=catx(' ',namelist,nliteral(name));
      put namelist=;
    run;