楼主: jinlin2009
3845 7

[原创博文] sas 数据集选择性输出 [推广有奖]

  • 1关注
  • 0粉丝

大专生

28%

还不是VIP/贵宾

-

威望
0
论坛币
98 个
通用积分
0.0015
学术水平
3 点
热心指数
4 点
信用等级
2 点
经验
443 点
帖子
42
精华
0
在线时间
54 小时
注册时间
2008-11-2
最后登录
2012-4-24

楼主
jinlin2009 发表于 2012-2-4 02:14:54 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
这个是原始数据集:

user_id  action seq

001 0 1
001 0 2
001 1 3
001 2 4
001 2 5
001 2 6
002 1 1
002 1 2
002 1 3
002 2 4
002 2 5

想要输出action的第一个最大值和它之前的所有行,输出完如下:

user_id  action seq

001 0 1
001 0 2
001 1 3
001 2 4
002 1 1
002 1 2
002 1 3
002 2 4

请高手帮忙!先谢啦
二维码

扫码加我 拉你入群

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

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

关键词:数据集 选择性 Action User 原始数据 action 选择性 最大值

沙发
sllhappy0729 发表于 2012-2-4 14:54:06
按照你的说法,应该输出这个结果
user_id  action seq

001 0 1
001 0 2
001 1 3
001 2 4
你先把问题搞清楚了再讨论!

藤椅
maidenhan 发表于 2012-2-4 16:02:42
According to your example, I think the following code could help.

data test01;
        input user_id $3. action seq;
cards;
001 0 1
001 0 2
001 1 3
001 2 4
001 2 5
001 2 6
002 1 1
002 1 2
002 1 3
002 2 4
002 2 5
;run;
proc sql;
        select max(action) into:max_action
                from test01;
quit;
data test02(drop = flag);
        retain flag;
        set test01;
        if action < &max_action. then do;
                flag = 1;
                output;
        end;else do;
                if flag = 1 then do;
                        flag = 0;
                        output;
                end;
        end;
run;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
jinlin2009 + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

板凳
beyondcj 发表于 2012-2-5 22:52:12
学习.......

报纸
jinlin2009 发表于 2012-2-7 01:04:10
maidenhan 发表于 2012-2-4 16:02
According to your example, I think the following code could help.

data test01;
多谢了!你的output语句非常有用!

地板
sl122113 发表于 2012-2-17 23:54:28
高手啊,膜拜。。。
Let Our Life Be Magic And Open

7
jingju11 发表于 2012-2-18 04:41:45
我感觉题目的原意是 by user_id:
  1. data test02;
  2.    drop m L;
  3.    do until(last.user_id);
  4.       set test01; by user_id notsorted;
  5.       m =max(m, action);
  6.    end;
  7.    do until(last.user_id);
  8.       set test01; by user_id notsorted;
  9.       if missing(L) then output;
  10.       if action =m then L =0;
  11.    end;
  12. run;
复制代码
京剧
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
jinlin2009 + 1 + 1 + 1 观点有启发

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

8
jinlin2009 发表于 2012-2-21 23:40:43
jingju11 发表于 2012-2-18 04:41
我感觉题目的原意是 by user_id:京剧
这个方法也不错

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

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