楼主: ashcdhdj
1307 2

[作业] SAS 一个数据集中按两个变量merge [推广有奖]

  • 0关注
  • 0粉丝

高中生

57%

还不是VIP/贵宾

-

威望
0
论坛币
596 个
通用积分
0.3000
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
63 点
帖子
2
精华
0
在线时间
63 小时
注册时间
2019-9-7
最后登录
2022-8-14

10论坛币
SAS

已知数据如下,当Namet和Stockcode两个变量都相同时进行合并:
Name       Stockcode     Quantity     Price
a                1                    100           5
a                2                    200           6

a                2                    100           6

b                3                    300           7

b                3                    100           7

c                1                    500           5

想要效果如下:
Name       Stockcode     Quantity     Price
a                1                    100           5
a                2                    300           6
b                3                    400           7
c                1                    500           5

最佳答案

Rock2000 查看完整内容

data a; input Name $ Stockcode Quantity Price; cards; a 1 100 5 a 2 200 6 a 2 100 6 b 3 300 7 b 3 100 7 c 1 500 5 ; run; ...
关键词:Merge 数据集 Quantity Stock quant SAS SAS数据分析方法 SASSQL 求助! sas 求助
沙发
Rock2000 发表于 2020-3-27 21:31:28 |只看作者 |坛友微信交流群
data a;
input Name $  Stockcode Quantity Price;
cards;
a                1                    100           5
a                2                    200           6
a                2                    100           6
b                3                    300           7
b                3                    100           7
c                1                    500           5
;
run;

data b; set a;
id=cats(name,Stockcode);
run;

proc sql;
create table test as
select Name,Stockcode, Price, id,
sum(Quantity) as cum_Quantity  
from b
group by id;
quit;

proc sort data=test nodupkeys out=c;by id;run;

data result;set c;Quantity=cum_Quantity;  drop id cum_Quantity; run;

使用道具

藤椅
jaxlee 发表于 2020-3-28 02:36:53 |只看作者 |坛友微信交流群
Here is another way, which use retain statement:

data a;
input Name $  Stockcode Quantity Price;
cards;
a                1                    100           5
a                2                    200           6
a                2                    100           6
b                3                    300           7
b                3                    100           7
c                1                    500           5
;
run;

proc print data=a;
run;

data b;
set a;
Name_stockcode=compress(name||Stockcode);
run;
proc print data=b;
run;

proc sort data=b out=c;
by Name_stockcode;
run;

data d;
set c;
by Name_stockcode;
retain cn_Quantity;
if first.Name_stockcode then do;
cn_Quantity=.;
end;
cn_Quantity+Quantity;
if last.Name_stockcode then do;
keep
name
stockcode
cn_Quantity
price;
output;
end;
run;

proc print data=d;
run;

使用道具

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

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

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

GMT+8, 2024-4-26 18:55