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