SAS 对单变量求和汇总(请问sum+age与sum=sum+age等效吗)


/*创建stuinfo表*/
data stuinfo;
input ID name $ age;  /*$默认是8位*/ /*注意数值型缺失值用.表示*/
cards;  
1 Tom    2
2 marry 6
3 louis .  
4 joy 1
5 bob 1
;
proc print;/*proc print后面如果不指定数据集就是默认当前数据集*/
run;

/*对其中age变量的总和*/

*1)求和语句进行累加---------值得推荐,    我在想 sum+age  和  sum=sum+age等同吗;
data a1;
set stuinfo;
sum+age;
proc print data=a1;run;
*note:sas在读取第一个观测前将求和语句中的累加变量sum的初始值设为0,每次迭代相加的结果保持在sum中,
下一次迭代仍然可以使用。
唯一要注意的是,若某次迭代中变量age为缺失值,求和语句会在当次迭代中将age作为0处理,因而该次迭代与上一次迭代sum数值相同;

*2)retain;  /*若age中有缺失值,retain就无法使用,这个要先注意下是否有缺失值*/
data a2;
    set stuinfo;
    retain sum 0;
    sum=sum+age;    
    proc print data= a2;
run;
*note:与实现1不同的是,这里使用了retain statement以及赋值操作
retain的目的:一是为了保证指定的sum变量不会在data步的每次迭代开始前在PDV中被设置成缺失值,而且保持上一次迭代的数值,以在下次迭代中继续使用(和前面的求和语句的作用相同);
二是给sum赋初始值0;
赋值操作值得注意一下,和上面求和语句不同,若age某次迭代中为缺失值,会导致当次及以后的所有迭代中sum均为缺失值;

*3)proc means-----------------------------值得推荐;
proc means data=stuinfo;  
var age;
output out=a3 sum(age)=zonghe; /*可以从a3看age的总和,如下截图*/
run;
/*note:sum函数会将missingvalue 算作0,即为只计算非缺失值参数的和*/

*4)proc sql-----------------------------值得推荐;
proc sql;
create table a4 as
select sum(age) as zonghe from stuinfo;/*as此处即为alias的简写,给变量命名别名*/
quit;

*5)do循环+point,即在do循环中实现整个数据集的遍历以及相应操作     这meiyongguooooooooo;
data a5;
sum=0;
i=1;
do until(i>obs);
set stuinfo nobs=obs point=i;
sum=sum+age;
i=i+1;
output;
end;
stop;
proc print data=a5;
run;
/*note: 通过nobs知道整个数据集的观测数,同时以point指针针对性地读取相应行的数据*/

*6)do循环+end,即在do循环中实现整个数据集的遍历以及相应操作     这meiyongguooooooooo;
data a6;
    do until(eof);
        set stuinfo end= eof;
        sum= sum(sum, age);
        put age= sum= eof= ;
        output;
    end;   
    proc print data= a6;
run;

*7)do循环+_n_,即在do循环中实现整个数据集的遍历以及相应操作     这meiyongguooooooooo;
data a7;
    do _n_= 1 by 1 until(eof);
        set stuinfo end= eof;
        sum= sum(sum, age);
        output;
    end;
run;

data a8;
    do _n_= 1 to obs;
        set stuinfo nobs= obs;
        sum= sum(sum, age);
        output;
    end;
run;
借鉴+练习+学习,若有违权,请联系本人删除,多谢

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值