这似乎很简单,但它没有按预期工作:
data names;
input name $12.;
cards;
John
Jacob
Jingleheimer
Schmidt
;
run;
data names;
length namelist $100.;
set names end=eof;
retain namelist;
if _n_=1 then namelist=name;
else namelist = namelist || "|" || name;
if eof then output;
run;
我希望结果有一个含有
的观察结果约翰|雅各布| Jingleheimer |施密特
但namelist
只是John
。我做错了什么?
答案 0 :(得分:5)
您需要在连接到列表之前修剪空白。
data names;
length namelist $100.;
set names end=eof;
retain namelist;
if _n_=1 then namelist=trim(name);
else namelist = trim(namelist) || "|" || trim(name);
if eof then output;
run;
您还可以使用cats()函数(为您执行修剪和连接):
data names;
length namelist $100.;
set names end=eof;
retain namelist;
if _n_=1 then namelist=name;
else namelist = cats(namelist,"|",name);
if eof then output;
run;
答案 1 :(得分:0)
如果您将STRIP添加到作业中
strip(namelist) || "|" || name
它也会起作用
(但CATS是一个非常好的解决方案)
答案 2 :(得分:0)
使用catx函数可以指定分隔符...
data names;
length namelist $100.;
set names end=eof;
retain namelist;
namelist = catx("|",namelist,name);
if eof then output;
run;