SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1598|回复: 3
打印 上一主题 下一主题

求助:统计及画图问题?

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-5-18 11:14:30 | 只看该作者

求助:统计及画图问题?

求助各位前辈;有下列数据:
名称         等级         单价         基价         差价         平均         最高
绿茶         一级        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、最高的填充,是将差价中比平均最大的数,填入。

谢谢!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-5-19 10:56:11 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2012-5-19 13:05:27 | 只看该作者

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]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2012-5-21 14:07:28 | 只看该作者

Re: 求助:统计及画图问题?

谢谢,各位的指教!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-6 13:33 , Processed in 0.069584 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表