#variables #split #sas
#переменные #разделение #sas
Вопрос:
У меня есть набор данных, содержащий переменную X, состоящий из нескольких чисел, разделенных запятой. Количество элементов в строках различно. Я создал счетчик слов. Теперь я хотел бы видеть числа в разных столбцах.
Вот пример:
X Num_of_X Var1 Var2 Var3 Var4 ... Varn
3,10,165 3 3 10 165
1 1 1
15,100 2 15 100
10,52,63,90 4 10 52 63 90
Я пробовал этот способ:
%let max_num_X=max(num_of_x);
data have;
set have;
length var1-varamp;max_num_X $10.;
array Var(amp;max_num_X) $;
do i=1 to amp;max_num_X;
Var[i]=scan(X,i,',');
output;
end;
run;
Не могли бы вы мне помочь?
Спасибо
Комментарии:
1. Вам нужно поместить фактическое максимальное значение NUM_OF_X из HAVE в переменную макроса. Все, что вы сделали, это поместили буквальный текст max …. в переменную макроса. Так что это приведет к генерации недопустимого кода SAS.
Ответ №1:
Сделайте что-то вроде этого
data have;
input X :$20.;
datalines;
3,10,165
1
15,100
10,52,63,90
;
data long;
set have;
n = _N_;
do i = 1 to countw(X, ',');
xx = scan(X, i, ',');
output;
end;
run;
proc transpose data = long out = want(drop=_:) prefix=Var;
by n;
id i;
var xx;
run;
Комментарии:
1. Это действительно работает! Спасибо! Не могли бы вы лучше объяснить мне шаги?
Ответ №2:
вы можете использовать макрос, чтобы найти максимальное число и создать переменные:
%macro create_vars();
proc sql noprint; select max(countw(X)) into :max_num_X from have; quit;
data have; set have;
%do i = 1 %to amp;max_num_X.; Varamp;i. = scan(X,amp;i.,','); %end;
run;
%mend;
%create_vars();