当具有相同urn的记录多于1条时,以下代码似乎不适用于变量all_s。 Var1,2,3可以正常工作,但是那不是,我不知道为什么。我正在尝试将all_s等于single_var1,2,3串联在一起,如果是first.urn则不带任何空格,但我希望它是
all_s = all_s +','+ single_var1 + single_var2 + single_var3
这不是那个ur的第一个实例。
data dataset_2;
set dataset_1;
by URN;
retain count var1 var2 var3 all_s;
format var1 $40. var2 $40. var3 $40. all_s $50.;
if first.urn then do;
count=0;
var1 = ' ';
var2 = ' ';
var3 = ' ';
all_s = ' ';
end;
var1 = catx(',',var1,single_var1);
var2 = catx(',',var2,single_var2);
var3 = catx(',',var3,single_var3);
all_s = cat(all_s,',',single_var1,single_var2,single_var3);
count = count+1;
if first.urn then do;
all_s = cat(single_var1,single_var2,single_var3);
end;
run;
答案 0 :(得分:1)
一些示例数据可能会有所帮助,但我将试一试并请您尝试
all_s = cat(strip(All_s),',',single_var1,single_var2,single_var3);
答案 1 :(得分:1)
all_s
个值的总长度超过var1-var3
,则 $50
的大小不足以包含串联。 var1-var3
为$40
时,这种情况似乎很可能。
我建议使用length
函数来指定可变长度。 format
将创建一定长度的变量作为副作用。
catx
从连接中删除空白参数,因此,如果在空白single_varN
中需要在连接中留空格,则将无法使用catx
一项要求指定串联以去除非空白值而空白值是一个空白的要求很可能不得不退回到传统的trim(left(…
方法上
示例代码
data have;
length group 8 v1-v3 $5;
input group (v1-v3) (&);
datalines;
1 111 222 333
1 . 444 555
1 . . 666
1 . . .
1 777 888 999
2 . . .
2 . b c
2 x . z
run;
data want(keep=group vlist: all_list);
length group 8 vlist1-vlist3 $40 all_list $50;
length comma1-comma3 comma $2;
do until (last.group);
set have;
by group;
vlist1 = trim(vlist1)||trim(comma1)||trim(left(v1));
vlist2 = trim(vlist2)||trim(comma2)||trim(left(v2));
vlist3 = trim(vlist3)||trim(comma3)||trim(left(v3));
comma1 = ifc(missing(v1), ' ,', ',');
comma2 = ifc(missing(v2), ' ,', ',');
comma3 = ifc(missing(v3), ' ,', ',');
all_list =
trim(all_list)
|| trim(comma)
|| trim(left(v1))
|| ','
|| trim(left(v2))
|| ','
|| trim(left(v3))
;
comma = ifc(missing(v3),' ,',',');
end;
run;
参考
SAS具有用于字符串连接的运算符和多个功能
||
串联cat
串联catt
连接并修剪(删除尾随空格)每个参数cats
串联,去除(删除开头和结尾的空格)每个参数catx
串联在一起,剥离每个参数并定界catq
与定界符和包含定界符的引用参数连接比较
CAT,CATS,CATT和CATX函数的结果通常等效于串联运算符(||)以及TRIM和LEFT函数的某些组合所产生的结果。但是,CAT,CATS,CATT和CATX函数的默认长度与使用串联运算符时获得的长度不同。有关更多信息,请参见Length of Returned Variable。
注意::对于变量缺少值的情况,串联将产生不同的结果。参见Concatenating Strings That Have Missing Values。