2016-03-30 1 views
0

У меня есть набор данных NXN, из которого я хотел бы иметь выход из одной строки (1XN). Мне нужно рассчитать проценты в каждом столбце. Когда я перемещаюсь по столбцу, числитель и знаменатель продолжают уменьшаться с 1 строки ниже.Номера Vary Row в петле SAS

данных У меня есть:

Category Month 0 1 2 3 4 5 6 7 8 9 
Categ_1 Month_1 15 15 15 14 14 13 13 13 13 13 
Categ_1 Month_2 8 8 8 7 6 5 5 5 5 5 
Categ_1 Month_3 15 15 14 14 14 12 11 11 11 10 
Categ_1 Month_4 17 17 17 15 14 14 13 12 11 11 
Categ_1 Month_5 25 25 25 23 21 19 18 16 16 16 
Categ_1 Month_6 21 21 18 17 14 13 12 11 11 8 
Categ_1 Month_7 29 28 25 23 20 18 15 14 13 13 
Categ_1 Month_8 32 31 30 28 25 23 21 20 18 17 
Categ_1 Month_9 38 37 35 32 27 24 23 20 17 16 
Categ_1 Month_10 30 30 28 27 24 21 20 18 17 17 

То, что я хочу

Categ_1 100% 99% 94% 87% 82% 79% 76% 76% 78% 87% 

где для столбца 1 (т.е. 100%) = (Всего в 0-й месяц)/(всего в 0-й месяц) где для столбца 2 (т.е. 99%) = (всего в 1-м месяце-последнем ряду)/(всего в 0-м месяце-последнем ряду) и т. д.

Я сделал это в Excel с использованием простой формулы OFFSET , Было бы здорово, если бы кто-нибудь мог помочь мне закодировать его в SAS. Мне трудно перебирать столбец по столбцу, в то время как переменные строки также меняются.

Спасибо заранее!

+0

Пожалуйста, объясните, что вы имеете в виду последней строки/одна строка ниже. (всего за 1-й месяц - всего за 2-й месяц)? – Jetzler

+0

в столбце 2 (99%), что я хочу, - это сумма первых 9 строк столбца 2/сумма первых 9 строк столбца 1 –

+0

Итак, вы хотите получить сумму верхней диагонали матрицы (представленной как набор данных SAS) ? У вас есть лицензия SAS/IML? – Joe

ответ

0

Это дает правильный результат. Трюк состоит в том, чтобы перебрать все переменные и на каждом шаге (итерация файла datastep) оставить еще один выход.

DATA in_data ; 
    INPUT Category $ Month $ var_0 - var_9 ; 
    DATALINES; 
Categ_1 Month_1 15 15 15 14 14 13 13 13 13 13 
Categ_1 Month_2 8 8 8 7 6 5 5 5 5 5 
Categ_1 Month_3 15 15 14 14 14 12 11 11 11 10 
Categ_1 Month_4 17 17 17 15 14 14 13 12 11 11 
Categ_1 Month_5 25 25 25 23 21 19 18 16 16 16 
Categ_1 Month_6 21 21 18 17 14 13 12 11 11 8 
Categ_1 Month_7 29 28 25 23 20 18 15 14 13 13 
Categ_1 Month_8 32 31 30 28 25 23 21 20 18 17 
Categ_1 Month_9 38 37 35 32 27 24 23 20 17 16 
Categ_1 Month_10 30 30 28 27 24 21 20 18 17 17 

; 

data out_data; 
do until (last.Category); 
    set in_data; 
    format out_0 - out_9 percent.; 
    array in [*] var_0 - var_9; 
    array out [*] out_0 - out_9; 
    by Category; 
    if first.Category then count = 0; 
    count + 1; 
    do i = 1 to dim(in) + 1 - count; 
     out[i] = sum(out[i],in[i]); 
     if dim(in) + 1 - i = count then out[i] = out[i] /out[1]; 
    end; 
end; 
    drop var_: month i count; 
run; 

редактировать: строить ошибку в при редактировании, теперь исправлена ​​

+0

Эй, это потрясающе и отлично работает. –

+0

Какая ошибка? Не нужно будет настраивать код для нескольких категорий, только для дополнительных переменных. Вы отсортировали свои данные по категориям и по месяцам? – Jetzler

+0

Рассчитывается только для первой категории и отдыха. –

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

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