SAS catx函数删除空格

SAS catx函数删除空格,sas,sas-macro,Sas,Sas Macro,我有一个数据集,它有1列和n行,如下所示: 数据集1: Column1 -------- AAA AAA BBB BBB CCC CCC DDD DDD EEE EEE 我想从该数据中生成一行,如下所示: “AAA”“AAA”“BBB”“BBB”“CCC”“CCC”“DDD”“DDD”“EEE”“EEE”“EEE”n 我会用宏来做这个 我以前喜欢catx功能。但该函数从数据中删除空格 我以前是这样做的: . . . . data _NULL_; if &I^

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

数据集1:

Column1
--------
AAA AAA
BBB BBB
CCC CCC
DDD DDD
EEE EEE
我想从该数据中生成一行,如下所示:

“AAA”“AAA”“BBB”“BBB”“CCC”“CCC”“DDD”“DDD”“EEE”“EEE”“EEE”n

我会用宏来做这个

我以前喜欢catx功能。但该函数从数据中删除空格

我以前是这样做的:

 .
 .
 .
 .
data _NULL_;
          if &I^=1 then do;
            frstclmn=&frstclmn||""""||"&clmn"||""""||"n ";
        end;
        run;
 .
 .
 .
但我不能在data语句中分配do lop中的变量

我该怎么办?谢谢

编辑:


这段代码运行得很好。现在我想在这个数据语句中使用这个namelist变量。如果我这样打印%put&namelist=;它在宏中显示错误的结果。我想在宏other语句中使用这个变量result。

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

data names;
   input name $32.;
   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

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

data names;
   input name $32.;
   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\u null
是更好的方法,但如果要在数据步骤中执行此操作,请使用
'
作为分隔符

    data _NULL_;
      set sashelp.class;
      retain namelist;
      length namelist $500;
      namelist=catx(' ',namelist,cats('"',name,'"n'));
      put namelist=;
    run;
当然,您可以使用
quote
,或
nliteral
,两者都可以获得更好的效果

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

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

    data _NULL_;
      set sashelp.class;
      retain namelist;
      length namelist $500;
      namelist=catx(' ',namelist,cats('"',name,'"n'));
      put namelist=;
    run;
当然,您可以使用
quote
,或
nliteral
,两者都可以获得更好的效果

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

我不知道宏是从哪里来的,你需要宏语言的帮助,你需要提供更多的代码。是的,catx删除空格,这是它的一个目的。你甚至还没有解释过你在用CATX做什么。我不知道宏是从哪里来的,你需要宏语言的帮助,你需要提供更多的代码。是的,CATX删除空格,这是它的一个目的。你甚至都没解释过你在用CATX做什么。太好了!我以前从未见过
nliteral
函数。我一直在用艰难的方式做事=(@user3646666)那条评论毫无意义。很好!我以前从未见过
nliteral
函数。我一直在用艰难的方式做事=(@user3646666)那条评论没有意义。这段代码运行,谢谢。但是我如何在data语句中使用这个名称列表变量..当我在宏%put&namelist=;中运行时,它显示错误的结果。
调用SYMPUTX
从中生成一个宏变量,如果你试图这样做的话。但是你真的应该在问题中解释更多。考虑到另一个答案是,我想它会更容易地给出你的结果。我很抱歉丢失了信息。你能解释一下我如何使用out-of语句吗?这段代码运行,谢谢。但是我如何使用这个namelist变量out-of-data语句..当我在宏%put&namelist=;中运行时,它会显示错误的结果。
调用SYMPUTX
到m如果你想这么做的话,请把它变成一个宏变量,但是你确实应该在这个问题上解释更多的内容,并且考虑另一个答案,我想它会更容易地给你你的结果。我很抱歉丢失了信息。你能解释一下我怎样才能用完声明吗?