全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
6835 5
2019-08-04
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 ------------------

二维码

扫码加我 拉你入群

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

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

全部回复
2019-8-4 10:19:37
请用 dataex 再重发资料,不应该有第一列之数字!
二维码

扫码加我 拉你入群

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

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

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

扫码加我 拉你入群

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

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

2019-8-4 16:23:23
复制代码


二维码

扫码加我 拉你入群

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

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

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学术大模型生成,添加下方二维码,优先体验功能试用



二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群