楼主: 阿呆sas
2187 10

sas 程序求助 [推广有奖]

  • 1关注
  • 0粉丝

高中生

10%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
0
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
561 点
帖子
22
精华
0
在线时间
12 小时
注册时间
2014-6-13
最后登录
2016-10-8

楼主
阿呆sas 发表于 2014-6-13 09:28:17 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
新人发帖,求助啊! 如果有这样一个类型的数据data a;input id fam tel vhid;
datalines;
1 1 0 1
1 0 1 2
2 1 0 3
1 0 0 4
2 0 1 5
2 0 1 6
3 1 1 7
3 1 1 8
3 1 1 9
4 0 0 10
4 0 0 11
4 0 1 12
5 0 1 13
5 0 1 14
5 0 1 15
6 1 0 16
6 1 0 17
6 1 0 18
7 0 0 19
7 1 0 20
7 0 0 21
;
我想按每个id筛选,每个id有三个数据,按顺序筛选,如果fam=1,则创建新变量L=1,每个id中L=1的最多只有一个,如果这id中fam=0,则筛选tel,如果Tel=1 则L=1,且同样每组最多一个,如果该组数据tel=0 fam=0,则L都为0. 要怎么实现啊。。。


二维码

扫码加我 拉你入群

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

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

关键词:Lines Input Data 新人发帖 line 程序

沙发
Bluewater1111 在职认证  发表于 2014-6-13 10:25:40
你说的每组最多一个是什么意思啊?

藤椅
阿呆sas 发表于 2014-6-13 10:33:17
Bluewater1111 发表于 2014-6-13 10:25
你说的每组最多一个是什么意思啊?
就是每组一旦有一个L=1,这个筛选就完成了

板凳
Bluewater1111 在职认证  发表于 2014-6-13 11:04:17
阿呆sas 发表于 2014-6-13 10:33
就是每组一旦有一个L=1,这个筛选就完成了
我这个电脑没SAS程序,不能验证,你尝试一下:

proc sort data=a;
by id;
run;

data b;
set a;
by id;
L=0;
if first.id then
   do until (L=1);
        if fam=1 or tel=1 then L=1;
   end;
run;


本文来自: 人大经济论坛 SAS专版 版,详细出处参考: https://bbs.pinggu.org/forum.php? ... amp;from^^uid=2382660

报纸
阿呆sas 发表于 2014-6-13 11:09:18
Bluewater1111 发表于 2014-6-13 11:04
我这个电脑没SAS程序,不能验证,你尝试一下:

proc sort data=a;
好像有点儿思路了,可是我想优先筛选fam 如果fam都得0的情况下 再筛选tel,这样怎么实现呢?

地板
Bluewater1111 在职认证  发表于 2014-6-13 11:17:35
阿呆sas 发表于 2014-6-13 11:09
好像有点儿思路了,可是我想优先筛选fam 如果fam都得0的情况下 再筛选tel,这样怎么实现呢?
对fam降序排列后
if fam=1 or (fam=0 and tel=1) then L=1;
else L=0;

7
learsaas 发表于 2014-6-13 11:33:28
不知道这个是不是你要的:
proc sort data=a;
by id descending fam descending tel vhid;
run;
data result;
set a;
by id descending fam descending tel vhid;
if first.id and (fam=1 or (fam=0 and tel=1)) then L=1;
else L=0;
run;
proc sort data=result;
by vhid;
run;

8
阿呆sas 发表于 2014-6-13 11:45:58
learsaas 发表于 2014-6-13 11:33
不知道这个是不是你要的:
proc sort data=a;
by id descending fam descending tel vhid;
嗯。。。可不可以实现当同样的id里面的所有fam=0的时候,再看tel,这时 如果tel=1,则L=1.不好意思啊,要求太多了。。。

9
阿呆sas 发表于 2014-6-13 16:48:44
learsaas 发表于 2014-6-13 11:33
不知道这个是不是你要的:
proc sort data=a;
by id descending fam descending tel vhid;
这个是可以,但是我不能改变这个顺序,因为这是按照时间顺序排列好的,我要按照时间的先后顺序进行筛选。如果不改变顺序能实现吗?

10
阿呆sas 发表于 2014-6-13 16:50:47
Bluewater1111 发表于 2014-6-13 11:17
对fam降序排列后
if fam=1 or (fam=0 and tel=1) then L=1;
else L=0;
我不能改变顺序呀,因为是按时间顺序排列的。我可以用max函数吗?如果max(fam)=0,在进行筛选tel,但是code 总是有问题。

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 09:40