Конкатенация SAS на основе значений - PullRequest
0 голосов
/ 26 апреля 2018

Ниже приведен пример данных.

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. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 26 апреля 2018

Используйте функцию CATX() для объединения переменных; с помощью этой функции у вас есть возможность указать символ-разделитель для использования между значениями. Ex. 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;

или

%let list=VAR2,VAR3,VAR4;
data want2;
set have;
NewVar= catx(',',&list.);
run;

или (рекомендация Тома)

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 
...