在观察结果中累积SAS中的文本变量

时间:2012-10-03 18:09:37

标签: sas

这似乎很简单,但它没有按预期工作:

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

3 个答案:

答案 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;