3

这看起来很简单,但它没有按预期工作:

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。我究竟做错了什么?

4

3 回答 3

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;
于 2012-10-03T18:17:49.907 回答
0

如果您在作业中添加了 STRIP

strip(namelist) || "|" || name

它也可以

(但 CATS 是一个非常好的解决方案)

于 2012-10-03T19:12:12.810 回答
0

使用 catx 函数可以指定分隔符...

data names;
    length namelist $100.;
    set names end=eof;
    retain namelist;
    namelist = catx("|",namelist,name);
    if eof then output;
run;
于 2012-10-04T08:46:47.943 回答