楼主: fzcoolbaby
1260 6

求助希望会SAS的高手帮助 [推广有奖]

  • 4关注
  • 1粉丝

已卖:516份资源

讲师

30%

还不是VIP/贵宾

-

威望
0
论坛币
47 个
通用积分
7.2300
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
10027 点
帖子
209
精华
0
在线时间
697 小时
注册时间
2009-7-29
最后登录
2025-5-16

楼主
fzcoolbaby 发表于 2012-1-31 20:29:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
现在有一个数据是这样的
QZ H1 F1 F2 F3 F4
1 1 001 1 0 2 15
1 1 001 2 1 1 12
1 1 001 3 2 1 1
1 1 002 1 0 2 3
1 1 002 2 1 1 5
1 1 003 1 0 1 7
1 1 004 1 0 2 13
1 1 004 2 3 1 34
1 004 3 5 1 2


H1未分组数据
现在要在每组内进行运算
让F2不为0的数字所对应的F4分别减去F2=0所对应的F4的值。如第一组中(12-15),(1-15)~~~~
希望SAS高手帮忙
二维码

扫码加我 拉你入群

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

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

关键词:sas的

沙发
maidenhan 发表于 2012-1-31 22:11:19
That's my solution.

data test01(drop = f4_with_f2_eq_0)
          test02(keep = h1 f4_with_f2_eq_0);
        format h1 $10.;
        input Q Z H1 $ F1 F2 F3 F4;
        if f2 = 0 then do;
                f4_with_f2_eq_0 = f4;
                output test02;
        end;else output test01;
cards;
1 1 001 1 0 2 15
1 1 001 2 1 1 12
1 1 001 3 2 1 1
1 1 002 1 0 2 3
1 1 002 2 1 1 5
1 1 003 1 0 1 7
1 1 004 1 0 2 13
1 1 004 2 3 1 34
1 1 004 3 5 1 2
;run;
data test03;
        if 0 then set test02;
        if _n_ = 1 then do;
                dcl hash h(dataset:"test02");
                h.definekey("h1");
                h.definedata("f4_with_f2_eq_0");
                h.definedone();
        end;
        set test01;
        if h.find()=0 then do;
                new_f4 = f4 - f4_with_f2_eq_0;
        end;
run;

藤椅
mymine 发表于 2012-2-1 08:32:26
简单语句的

data a;
input Q Z H1 $3. F1 F2 F3 F4;
cards;
1 1 001 1 0 2 15
1 1 001 2 1 1 12
1 1 001 3 2 1 1
1 1 002 1 0 2 3
1 1 002 2 1 1 5
1 1 003 1 0 1 7
1 1 004 1 0 2 13
1 1 004 2 3 1 34
1 1 004 3 5 1 2
;
run;

proc sql;
create table b as
select a.*,b.f4 as f5
from a left join a as b
on a.h1=b.h1 and b.f2=0;
quit;

data b;
set b;
f6=f4-f5;
run;

板凳
gaotao0727 发表于 2012-2-1 09:39:06
学习了~~~
衣带渐宽终不悔,为伊消得人憔悴~~

报纸
zhangzachary 发表于 2012-2-1 10:14:13
用一下 “藤椅”楼建立的原数据a:
data res;
set a;
by h1;
retain f2_0;
if first.h1 then f2_0=f4;
res=f4-f2_0;
run;
不过之前最好sort by h1 f2 并且确认每组h1都有f2=0唯一项~
寒冰凤凰 My blog: http://blog.sina.com.cn/u/1058955485

地板
shenliang_111 发表于 2012-2-1 18:18:56
  1. data a;
  2. input  Q  Z  H1 $ F1-F4;
  3. cards;
  4. 1 1 001 1 0 2 15
  5. 1 1 001 2 1 1 12
  6. 1 1 001 3 2 1 1
  7. 1 1 002 1 0 2 3
  8. 1 1 002 2 1 1 5
  9. 1 1 003 1 0 1 7
  10. 1 1 004 1 0 2 13
  11. 1 1 004 2 3 1 34
  12. 1 .  004 3 5 1 2
  13. ;
  14. data result;
  15. do _n_=1 by 1 until(last.h1);
  16.    set a;
  17.    by h1;
  18.    f0=ifn(f2=0,f4,f0);
  19.    diff=f4-f0;
  20.    output;
  21.   end;
  22. run;
复制代码

7
crazygoing 发表于 2012-2-2 09:44:15
sas的数据整理功能强大啊!
学习了

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

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