2015-02-15 4 views
0

Я пытаюсь вычислить грандиозное значение подмножества наблюдений (например, наблюдение 20 для наблюдения 50) в шаг data. В этом расчете я также хочу пропустить (игнорировать) любые отсутствующие значения.SAS: на этапе DATA, как вычислить грандиозное значение подмножества наблюдений, пропуская недостающие значения

Я попытался поиграть с функцией mean, используя различные операторы if … then, но, похоже, я не могу их комбинировать.

Любая помощь будет высоко оценена.

Для справки, вот основная схема моих шагов данных:

data sas1; 
infile '[file path]'; 
input v1 $ 1-9 v2 $ 11 v3 13-17 [redacted] RPQ 50-53 [redacted] v23 101-106; 
    v1=translate(v1,"0"," "); 
format [redacted]; 
label [redacted]; 
run; 

data gmean; 
set sas1; 
id=_N_; 
if id = 10-40 then do; 
    avg = mean(RPQ); 
    end; 
/*Here, I am trying to calculate the grand mean of the RPQ variable*/ 
/*but only observations 10 to 40, and skipping over missing values*/ 
run; 
+1

Если вы делаете это с помощью шага данных, лучше всего показывать свой код, поскольку существует множество методов. В общем, я бы порекомендовал proc, поскольку он игнорирует отсутствующие значения по умолчанию. – Reeza

+0

@Reeza Спасибо за ваш комментарий. Я добавил свой сокращенный код выше для справки. Обычно я также использую «proc», но в этом случае я ограничусь «шагом данных». – mrt

+0

Ваш код не показывает, что вы пробовали. Ожидаете ли вы, что результат будет во всех рядах (10-40) или только в последней строке? – Reeza

ответ

1

Используйте автоматическую переменную/_N_/к идентификатору строки. Используйте значение суммы, которое сохраняется в строке, и затем делится на количество наблюдений в конце. Используйте функцию missing(), чтобы определить количество присутствующих наблюдений и добавить или добавить в текущую сумму.

data stocks; 
set sashelp.stocks; 
retain sum_total n_count 0; 
if 10<=_n_<=40 and not missing(open) then do; 
    n_count=n_count+1; 
    sum_total=sum_total+open; 
end; 

if _n_ = 40 then average=sum_total/n_count; 
run; 

proc print data=stocks(obs=40 firstobs=40); 
var average; 
run; 

*check with proc means that the value is correct; 
proc means data=sashelp.stocks (firstobs=10 obs=40) mean; 
var open; 
run; 
+0

Я очень ценю вашу помощь. :) Я направляюсь к другому компьютеру, и поэтому немного расскажу, если это сработало для меня. Большое спасибо. – mrt

+0

Потребовалось немного подстройки к моему собственному набору данных, но это закончилось тем, что я работал (и я подтвердил его с помощью 'proc means' и Excel). Еще раз спасибо за то, что нашли время, чтобы помочь мне. – mrt