SAS中文论坛

标题: 求助:统计及画图问题? [打印本页]

作者: shiyiming    时间: 2012-5-18 11:14
标题: 求助:统计及画图问题?
求助各位前辈;有下列数据:
名称         等级         单价         基价         差价         平均         最高
绿茶         一级        85        80        5        6        7
绿茶                  86        80        6        6        7
绿茶                  87        80        7        6        7
绿茶         二级        33        30        3        4        5
绿茶                  34        30        4        4        5
绿茶                  35        30        5        4        5
茉莉茶         一级        85        80        5        6        7
茉莉茶                  86        80        6        6        7
茉莉茶                  87        80        7        6        7
茉莉茶         二级        33        30        3        4        5
茉莉茶                  34        30        4        4        5
茉莉茶                  35        30        5        4        5

请教下列问题,如何编写程序?  版本是SAS9.2
1、将等级的空白格按照上面的等级填充。
2、平均的计算,是按照不同的名称(如茶叶,茉莉茶),计算差价的平均值。再填充。
3、最高的填充,是将差价中比平均最大的数,填入。

谢谢!!
作者: shiyiming    时间: 2012-5-19 10:56
标题: Re: 求助:统计及画图问题?
[code:256f22yr]/*---假设你的数据集是a,变量分别为name(名称)、level(等级)、price(单价)、base(基价)、dif(差价)---*/
/*1、将等级的空白格按照上面的等级填充。*/
data result1(drop=tmp);
        set a;
        length tmp $4;
        retain tmp;
        if missing(level) then level=tmp;
        else tmp=level;
run;
/*2、平均的计算,是按照不同的名称(如茶叶,茉莉茶),计算差价的平均值。再填充。*/
/*3、最高的填充,是将差价中比平均最大的数,填入。------这句话有点不理解,个人直接用最大值填充了*/
data result2(drop=n sum);
        if 0 then set result1;
        length avg max n sum 8;
        n=0;sum=0;max=.;
        do until(last.level);
                set result1;
                by name level notsorted;
                n=sum(n,1);
                sum=sum(sum,dif);
                max=max(max,dif);
        end;
        do until(last.level);
                set result1;
                by name level notsorted;
                avg=ifn(n=0 or missing(n),.,sum/n);
                output;
        end;
run;[/code:256f22yr]
作者: shiyiming    时间: 2012-5-19 13:05
标题: Re: 求助:统计及画图问题?
很久没写SAS代码了,直接C过来的数据,读取level时有点小问题,简单用sql实现
[code:2s7c0890]data _a1;
        infile datalines dsd missover dlm=' ';
        input name : $10. level : $10. price base diff avg max;
        datalines;
绿茶 一级 85 80 5 6 7
绿茶   86 80 6 6 7
绿茶   87 80 7 6 7
绿茶 二级 33 30 3 4 5
绿茶   34 30 4 4 5
绿茶   35 30 5 4 5
茉莉茶 一级 85 80 5 6 7
茉莉茶   86 80 6 6 7
茉莉茶   87 80 7 6 7
茉莉茶 二级 33 30 3 4 5
茉莉茶   34 30 4 4 5
茉莉茶   35 30 5 4 5
;
run;

data _a2;
        set _a1(drop=avg max);
        retain level1;
        if ^missing(compress(level,' ')) then level1=level;
run;

proc sql noprint;
        create table _a3 as
        select name,level1,price,base,diff,avg(diff) as avg,max(diff) as max
        from _a2
        group by name,level1;
quit;


[/code:2s7c0890]
作者: shiyiming    时间: 2012-5-21 14:07
标题: Re: 求助:统计及画图问题?
谢谢,各位的指教!!




欢迎光临 SAS中文论坛 (http://www.mysas.net/forum/) Powered by Discuz! X3.2