楼主: sas年轻人
1530 8

[SAS EM] 【求助】关于sas在同一变量下计算求和的问题 [推广有奖]

  • 1关注
  • 0粉丝

高中生

72%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
285 点
帖子
31
精华
0
在线时间
25 小时
注册时间
2020-10-21
最后登录
2021-7-12

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
请教下各位老师,现在我有两列数据,数据格式如下:
id      price    乘数      标签
a        100       0.1         1
ac      101       0.2         1ab      102       0.5        1
ba      80         0.6        2
bc      100       0.43      2
bd     103        0          1
af       50          2         3
ca      150        0.33     3
cd      60          0.7       2

我想求助一下,我想计算在同一个标签类型下,每个id的(price*乘数)/sum(price)
例如在标签的=1 的时候,就是(100*0.1+101*0.2+102*0.5+103*0)/(100+101+102+103);
我想请问一下用sas表达式应该怎么写呢?

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:Price Rice 数据格式 ice 表达式

沙发
sas年轻人 发表于 2020-11-4 09:36:13 |只看作者 |坛友微信交流群
有没有老师能帮我看看,谢谢大家了

使用道具

藤椅
sas年轻人 发表于 2020-11-4 09:42:16 |只看作者 |坛友微信交流群
求助求助!

使用道具

板凳
sas年轻人 发表于 2020-11-4 10:37:16 |只看作者 |坛友微信交流群
有老师帮我看看么

使用道具

报纸
sas年轻人 发表于 2020-11-4 14:59:14 |只看作者 |坛友微信交流群
有人能看看么?帮帮孩子吧

使用道具

地板
sas年轻人 发表于 2020-11-4 16:36:42 |只看作者 |坛友微信交流群
求助一下各位老师们,还是没写出来

使用道具

7
banishurface 学生认证  发表于 2020-12-23 19:56:58 |只看作者 |坛友微信交流群
proc sql noprint;
create table result2 as
select *
                ,sum(price*multi)/sum(price) as answer
from data2
group by label
;
quit;

label是标签,multi是乘数

使用道具

8
huangtiancheng 在职认证  发表于 2021-1-20 10:59:22 |只看作者 |坛友微信交流群

data source;
input id $ price multi label;
datalines;
a 100 0.1 1
ac 101 0.2 1
ab 102 0.5 1
ba 80 0.6 2
bc 100 0.43 2
bd 103 0 1
af 50 2 3
ca 150 0.33 3
cd 60 0.7 2
;
run;
proc sort data=source;
by label;
run;
data sumdata;
set source;
by label;
last=last.label;
if last^=1 then
do;
sum+price*multi;
sumprice+price;
end;
else
do;
account=sum/sumprice;
output;
end;
run;
proc print data=sumdata;
var label account;
run;

使用道具

9
learntongji 发表于 2021-1-24 02:18:27 |只看作者 |坛友微信交流群
Above Data step method is not correct.  Please see following code.


proc sort data=source;
by label;
run;

data main;
        set source;
        by label;
        retain fenzi_sum 0  fenmu_sum 0;
        if first.label then do;
                fenzi_sum = price*multi;
                fenmu_sum = price;
        end;
        if not first.label then do;
                fenzi_sum= fenzi_sum + price*multi;
                fenmu_sum = fenmu_sum + price;
        end;
        if last.label then do;
                answer = fenzi_sum/fenmu_sum;
                output;
        end;
run;

proc sort data=main; by label ; run;

data final;
        merge source  main(keep=label answer);
        by label;
run;

In summary, proc sql and data step are all fine with this problem. Proc sql looks even simpler.

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 15:27