楼主: stataxsd
6894 5

[数据管理求助] 如何删除满足多个条件的某行 [推广有奖]

  • 1关注
  • 0粉丝

本科生

71%

还不是VIP/贵宾

-

威望
0
论坛币
20579 个
通用积分
6.0980
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
1169 点
帖子
74
精华
0
在线时间
60 小时
注册时间
2019-6-23
最后登录
2023-1-2

楼主
stataxsd 发表于 2019-8-4 09:25:29 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
fid16代表家庭编码,pid代表户主编码,tb1y_a_p代表户主出生日期,pid_s代表配偶编码,tb1y_a_s代表配偶出生日期,tb1y_a_c*代表孩子出生日期,-8表示不使用。现要剔除某一行,要求为fid16只出现一次、pid_s、tb1y_a_s、tb1y_a_c*均为-8.比如fid为267925和267974以及269645这三行即为满足条件可剔除的行。因为我的目的是收集有配偶有孩子的家庭,而非无配偶无孩子的个人。---------------------- copy starting from the next line -----------------------
  • * Example generated by -dataex-. To install: ssc install dataex
  • clear
  • input long(fid16 pid) int tb1y_a_p double pid_s int(tb1y_a_s tb1y_a_c1 tb1y_a_c2 tb1y_a_c3 tb1y_a_c4 tb1y_a_c5)
  • 267249 410104103 1975        -8   -8 1999 -8 -8 -8 -8
  • 267249 410104104 1999        -8   -8   -8 -8 -8 -8 -8
  • 267754 410594101 1972 410594102 1970 1998 -8 -8 -8 -8
  • 267754 410594103 1998        -8   -8   -8 -8 -8 -8 -8
  • 267925 620999105 1990        -8   -8   -8 -8 -8 -8 -8
  • 267974 410821103 1990        -8   -8   -8 -8 -8 -8 -8
  • 268074 621168103 1989 268074551 1987 2012 -8 -8 -8 -8
  • 268836 411720104 1989 268836551 1990   -8 -8 -8 -8 -8
  • 269645 430382104 1987        -8   -8   -8 -8 -8 -8 -8
  • 269949 269949501 1994 211796105 1989   -8 -8 -8 -8 -8
  • end

[color=rgb(51, 102, 153) !important]复制代码


------------------ copy up to and including the previous line ------------------

二维码

扫码加我 拉你入群

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

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

关键词:including IMPORTANT generated previous Starting

沙发
黃河泉 在职认证  发表于 2019-8-4 10:19:37
请用 dataex 再重发资料,不应该有第一列之数字!

藤椅
450667569 发表于 2019-8-4 10:57:09
筛选条件看的脑阔疼,你问的应该是筛选时附加多个条件?
举个例子,一组变量是ID(身份证号)、sex(性别)、born(出生年月),删除出生于1980年前的女性的代码是
drop if sex=="女"&born<1980

板凳
蓝色 发表于 2019-8-4 16:23:23
  1. * Example generated by -dataex-. To install: ssc install dataex
  2. clear
  3. input long(fid16 pid) int tb1y_a_p double pid_s int(tb1y_a_s tb1y_a_c1 tb1y_a_c2 tb1y_a_c3 tb1y_a_c4 tb1y_a_c5)
  4. 267249 410104103 1975        -8   -8 1999 -8 -8 -8 -8
  5. 267249 410104104 1999        -8   -8   -8 -8 -8 -8 -8
  6. 267754 410594101 1972 410594102 1970 1998 -8 -8 -8 -8
  7. 267754 410594103 1998        -8   -8   -8 -8 -8 -8 -8
  8. 267925 620999105 1990        -8   -8   -8 -8 -8 -8 -8
  9. 267974 410821103 1990        -8   -8   -8 -8 -8 -8 -8
  10. 268074 621168103 1989 268074551 1987 2012 -8 -8 -8 -8
  11. 268836 411720104 1989 268836551 1990   -8 -8 -8 -8 -8
  12. 269645 430382104 1987        -8   -8   -8 -8 -8 -8 -8
  13. 269949 269949501 1994 211796105 1989   -8 -8 -8 -8 -8
  14. end


  15. bys fid16: egen ln=count(pid)
  16. gen dropid=1  if ln==1 & pid_s==-8 &  tb1y_a_s==-8 &   ///
  17.                  tb1y_a_c1==-8 &  tb1y_a_c2==-8 &     ///
  18.                                  tb1y_a_c3==-8 &  tb1y_a_c4==-8 &     ///
  19.                                  tb1y_a_c5==-8   
  20. list fid16 ln dropid  if dropid==1
复制代码


已有 1 人评分经验 论坛币 收起 理由
葫芦娃大王 + 10 + 10 精彩帖子

总评分: 经验 + 10  论坛币 + 10   查看全部评分

报纸
Vanessa0923 学生认证  发表于 2024-2-29 14:34:34
450667569 发表于 2019-8-4 10:57
筛选条件看的脑阔疼,你问的应该是筛选时附加多个条件?
举个例子,一组变量是ID(身份证号)、sex(性别)、 ...
stata好像不能用&

地板
赵安豆 发表于 2024-5-3 17:21:36
要实现这个目标,我们需要使用Stata这个统计软件。下面的步骤将指导你如何删除满足多个条件的某些行,即只出现一次的`fid16`,以及`pid_s`、`tb1y_a_s`、`tb1y_a_c*`均为-8的行。

首先,假设你已经将数据加载到Stata中,我们将使用`drop if`命令结合一系列条件来删除这些行。这里的关键是先标记出满足所有条件的行,然后再删除它们。因为你的目的是保留有配偶且有孩子的家庭记录,我们需要识别出那些`pid_s`(配偶编码)、`tb1y_a_s`(配偶出生日期)、`tb1y_a_c*`(孩子出生日期)均为-8的记录,同时这些记录的`fid16`(家庭编码)只出现了一次。

```stata
* 首先,我们统计每个家庭编码(fid16)出现的次数
bysort fid16: gen count = _N

* 接着,我们标记出那些要删除的行。这些行的特征是fid16只出现一次,且pid_s、tb1y_a_s、tb1y_a_c1至tb1y_a_c5均为-8。
gen todrop = count == 1 & pid_s == -8 & tb1y_a_s == -8 & ///
tb1y_a_c1 == -8 & tb1y_a_c2 == -8 & tb1y_a_c3 == -8 & ///
tb1y_a_c4 == -8 & tb1y_a_c5 == -8

* 最后,我们删除这些行
drop if todrop == 1

* 清理工作,删除辅助变量
drop count todrop
```

这段代码首先通过`bysort`和`gen`命令统计了每个`fid16`值出现的次数,并将其存储在一个新的变量`count`中。接着,它定义了一个新的变量`todrop`,这个变量标记了那些满足所有删除条件的行。最后,使用`drop if`命令删除了这些行,并清理了之前创建的辅助变量。

请注意,如果你有多个`tb1y_a_c*`变量代表不同的孩子,你可能需要调整上述代码中的`tb1y_a_c1`至`tb1y_a_c5`部分以匹配你的数据结构。我们假设了最多五个孩子的情况,但你可以根据实际情况进行调整。

此文本由CAIE学术大模型生成,添加下方二维码,优先体验功能试用



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

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-29 12:04