全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
3230 2
2020-08-21
悬赏 1 个论坛币 未解决
为什么stata只执行if而没有执行else if之后的部分?不知道哪里错了,求指点
数据说明:ageb1到ageb5是五个子女的年龄,依次从大到小,可以有缺漏值;q406e1-q406e5则为对应子女的现居地,取值1为本地。
目的:至少有一个3岁以下子女且现居地为本地
本人的思路:先筛选至少有一个小于3岁的子女的样本,然后再根据缺漏值最大,选出那个最小的子女,再看看它的现居地是不是1,但是运行之后却发现stata只执行if而没有执行else if之后的部分?求解答!如果有更好的方法,也恳请指教!

keep if ageb1 <4 | ageb2 <4 | ageb3 <4 | ageb4 <4 | ageb5 <4
if ageb1 < ageb2{
  drop if q406e1 != 1
}
else if ageb1 >= ageb2{
  if ageb2 < ageb3{
    drop if q406e2 != 1
  }
  else  if ageb2 >= ageb3{
    if ageb3 < ageb4{
          drop if q406e3 != 1
    }
        else if ageb3 >= ageb4{
          if ageb4 < ageb5{
            drop if q406e4 != 1
          }
          else if ageb4 >= ageb5{
            drop if q406e5 != 1
      }
   }
  }
}
二维码

扫码加我 拉你入群

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

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

全部回复
2020-11-13 22:29:37
同问!请问有解决吗?
二维码

扫码加我 拉你入群

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

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

2024-5-4 10:59:20
在Stata中,`if`语句通常用于数据处理中的条件判断,但与其他编程语言中的`if-else`或`else if`结构不同,Stata的`if`通常是作为命令的一部分而不是独立的控制流结构来使用。因此,并不存在`else if`的语法。如果你想根据不同的条件执行不同的操作,通常需要通过连续的`if`语句或使用`replace`、`generate`等命令结合条件表达式来实现。

你的目标是筛选出至少有一个3岁以下子女且现居地为本地的样本。这个任务可以通过组合条件和使用适当的Stata命令来完成。下面是一个可能的解决方案:

```stata
* 假设数据已经加载到Stata中

* 生成一个标记变量,初值设为0(代表不满足条件)
gen flag = 0

* 遍历所有子女的年龄和现居地,如果满足条件,则将flag设为1
replace flag = 1 if (ageb1 <= 3 & q406e1 == 1) | ///
                   (ageb2 <= 3 & q406e2 == 1) | ///
                   (ageb3 <= 3 & q406e3 == 1) | ///
                   (ageb4 <= 3 & q406e4 == 1) | ///
                   (ageb5 <= 3 & q406e5 == 1)

* 保留满足条件的观察值
keep if flag == 1

* 可以删除flag变量,如果不再需要
drop flag
```

这段代码首先创建一个名为`flag`的标记变量,用于标识每个观察值是否满足条件(至少有一个3岁以下的子女且现居地为本地)。通过`replace`命令遍历所有子女的年龄和现居地信息,如果某个观察值满足条件,则将其`flag`设为1。最后,使用`keep if flag == 1`命令保留那些满足条件的观察值,从而达到你的目标。

需要注意的是,这里假设年龄和现居地的变量中没有缺失值的情况。如果存在缺失值,可能需要更复杂的逻辑来确保结果的准确性。例如,你可能需要使用`mi`系列命令处理缺失数据,或在条件判断中加入对缺失值的处理。

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



二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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