基于值的SAS连接
下面是示例数据基于值的SAS连接,sas,string-concatenation,sas-macro,Sas,String Concatenation,Sas Macro,下面是示例数据 NAME VAR2 VAR3 VAR4 VAR5 ABC X Y 2 DEF P Q R 3 GHI L 1 变量的计数(来自VAR2-VAR4)在VAR5下为每个记录提供,我希望以下输出与NewVar一起作为包含值的变量的串联 NAME VAR2 VAR3 VAR4 VAR5 NewVar ABC X Y 2 X,Y DEF P Q R
NAME VAR2 VAR3 VAR4 VAR5
ABC X Y 2
DEF P Q R 3
GHI L 1
变量的计数(来自VAR2-VAR4)在VAR5下为每个记录提供,我希望以下输出与NewVar一起作为包含值的变量的串联
NAME VAR2 VAR3 VAR4 VAR5 NewVar
ABC X Y 2 X,Y
DEF P Q R 3 P,Q,R
GHI L 1 L
我不知道如何在SAS中完成它。非常感谢您的帮助。使用CATX()
函数连接变量;使用此函数,您可以选择指定要在值之间使用的分隔符。例如,CATX(“,”,VAR2,VAR3,VAR4)
输入数据:
data have;
input NAME $ VAR2 $ VAR3 $ VAR4 $ VAR5;
datalines;
ABC X Y . 2
DEF P Q R 3
GHI L . . 1
;
run;
解决方案:
data want;
set have;
NewVar= catx(',',VAR2,VAR3,VAR4);
run;
或
或(汤姆的推荐)
输出:
NAME=ABC VAR2=X VAR3=Y VAR4= VAR5=2 NewVar=X,Y
NAME=DEF VAR2=P VAR3=Q VAR4=R VAR5=3 NewVar=P,Q,R
NAME=GHI VAR2=L VAR3= VAR4= VAR5=1 NewVar=L
感谢momo1644,这非常简单,我想知道是否可以根据需要连接的变量数量为此创建一个宏?例如我不想每次需要输入catx(“,”,var1,var2,…varn)。谢谢。我不认为宏函数在这里是实用的,因为catx()可以实现您想要的连接。但是,为了减少键入次数,可以将变量名保存在宏变量中。我将把代码添加到我的答案中。除非您要连接表中名称中包含VAR的所有字段。如果您要在函数调用中使用变量列表,请使用关键字的
newvar=catx(',',属于var1-var5)
或newvar=catx(',',属于b c e f)
是的,MOMOO1644所有需要连接的变量都有一个共同的前缀。Tom上面的建议将为您提供这一功能,为了全面起见,我将其添加到我的答案中。
data want3;
set have;
NewVar= catx(',',of var2-var4);
run;
NAME=ABC VAR2=X VAR3=Y VAR4= VAR5=2 NewVar=X,Y
NAME=DEF VAR2=P VAR3=Q VAR4=R VAR5=3 NewVar=P,Q,R
NAME=GHI VAR2=L VAR3= VAR4= VAR5=1 NewVar=L