楼主: Kaeder
2444 2

请教:怎样合并观测数据并批量进行上下行的计算? [推广有奖]

  • 0关注
  • 0粉丝

VIP1+

高中生

45%

还不是VIP/贵宾

-

威望
0
论坛币
8735 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1841 点
帖子
14
精华
0
在线时间
28 小时
注册时间
2016-5-19
最后登录
2020-1-19

楼主
Kaeder 发表于 2016-5-20 21:35:51 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
想请教各位大牛,对于类似下面这样的数据表格

Obs Name Day Time Amount
1 A 1 12:00:00 100
2 A 1 12:00:00 200
3 A 1 12:00:00 -50
4 B 1 12:00:00 50
5 B 2 13:00:00 100


我有几个处理这个数据的问题:

1. 怎样把Name、Day和Time都相同的Obs的Amount加起来?也就是说怎样在DATA里把Obs 1、2、3这几次观测数据的Amount加起来然后合成一项新的Obs?如果在DATA里做不到,该怎样用PROC写呢?

2. 如果我不是想加起来而是想保留Name、Day和Time都相同的项里面的最后一项(例如在Obs 1、2、3中只保留3)我应该怎么做?

3. 怎样去掉突变值?例如我想仅保留Amount是上一次Obs的10%到十倍的Obs,应该怎样写DATA里的WHERE条件呢?


4.怎样构建一个新的变量Difference,定义为本次Obs的Amount减去上一次Obs的Amount?

刚入SAS坑的小白万分感谢各位大牛!
二维码

扫码加我 拉你入群

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

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

关键词:difference amount DIFFER erence Where

回帖推荐

eflucy 发表于2楼  查看完整内容

1 proc sort data=have; by Name Day Time; run; data want1; retain name day time sum; set have; by name day time; if first.time then sum=amount; else sum+amount; if last.time; keep name day time sum; run; 2 proc sort data=have; by name day time; run; data want2; set have; by name day time; if last.time then output; run; 3. 这个是同一 ...

沙发
eflucy 发表于 2016-5-23 10:31:18
1
proc sort data=have;
    by Name  Day Time;
run;

data want1;
retain name  day  time sum;
set have;
by name day time;
if first.time then sum=amount;
               else sum+amount;
if last.time;
keep name day time sum;
run;

2
proc sort data=have;
     by name day time;
run;

data want2;
  set have;
  by name day time;
  if last.time then output;
run;

3. 这个是同一个id之间比较? 还是A和B也可以比?

data tmp;
merge have(keep= name amount rename=(name=name_last amount=amount_last )) have(firstobs=2);
if name=name_last and abs(amount) le abs(amount_last);
run;

data tmp2;
  set have;
  amount_last=lag(amount);
run;

3和4 用lag函数就行 用我上一步那样merge也行你自己再接着写吧.......

藤椅
ashleyle 发表于 2016-5-23 20:33:03
1. proc sql;
    create table xx as
    select *,
             sum(amount) as sum_amount
    from a.xx
    group by name;
    quit;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-2 10:49