SAS:在DATA步骤中,如何计算观察子集的平均值,跳过缺失值

时间:2015-02-15 01:10:34

标签: sas mean missing-data

我试图在data步骤中计算观察子集(例如观察20到观察50)的平均值。在此计算中,我还想跳过(忽略)任何缺失值。

我尝试使用各种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 个答案:

答案 0 :(得分: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;