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;
当然你可以使用 quote
或 nliteral
,两者都可以达到更好的效果。
data _NULL_;
set sashelp.class;
retain namelist;
length namelist 0;
namelist=catx(' ',namelist,nliteral(name));
put namelist=;
run;
我有一个包含 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;
当然你可以使用 quote
或 nliteral
,两者都可以达到更好的效果。
data _NULL_;
set sashelp.class;
retain namelist;
length namelist 0;
namelist=catx(' ',namelist,nliteral(name));
put namelist=;
run;