基于值的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