SAS catx函数删除空格
我有一个数据集,它有1列和n行,如下所示: 数据集1: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^
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如果你想这么做的话,请把它变成一个宏变量,但是你确实应该在这个问题上解释更多的内容,并且考虑另一个答案,我想它会更容易地给你你的结果。我很抱歉丢失了信息。你能解释一下我怎样才能用完声明吗?