2014-10-15 4 views
2

У меня есть следующий набор данных:массив SAS DO расчет контура в пределах шага данных

data have; 
    input x10 x22 x13 x64; 
cards; 
20 10 30 1 
; 
run; 

Я хочу создать четыре новых столбцов, называемых log_x10, log_x22, log_x13, log_x64, которые являются журналы исходных столбцов. Я знаю, что это, вероятно, довольно простой массив, цикл, но я довольно новичок в массивах и не могу получить синтаксис. Вот что у меня есть:

data want; 
    set have; 
    array var[*] x: ; 
    do j=1 to dim(var); 
     logx[j]=log(var[j]); 
    end; 
run; 

Это не всегда будет четыре переменные, иногда меньше или больше. У меня есть номера id, втянутые в макролист id=(10,22,13,64), поэтому можно попытаться использовать что-то вроде этого.

Идеи? Благодарю.

ответ

2

Думаю, вам нужно будет установить длину вашего массива, чтобы объявить массив результатов. К счастью, вы можете загрузить его в макро переменную с коротким datastep.

data have; 
    input x10 x22 x13 x64; 
cards; 
20 10 30 1 
; 
run; 

data _null_; 
    set have (obs=1); 
    array vars[*] x: ; 
    call symput('array_length',cats(dim(vars))); 
run; 

data want; 
    length logx1-logx&array_length. 8; 
    set have; 
    array vars[*] x: ; 
    array logvars[*] logx1-logx&array_length.; 
    do j=1 to dim(vars); 
     logvars[j]=log(vars[j]); 
    end; 
run; 
+0

Спасибо, Джефф! – pyll

 Смежные вопросы

  • Нет связанных вопросов^_^