【问题标题】:Loop for Data Management数据管理循环
【发布时间】:2021-05-02 10:10:23
【问题描述】:

对于如下数据集

我想根据B1_04 更改G7_A6 的值,即1 或2。对于给定的 ID(有两个相同的 ID)G7_A6 只取 1 或只取 2。

我需要在 Stata [在此处输入图像描述][1] 中使用循环,因为我有一个非常大的数据集并且输入单个 ID 很麻烦

replace G7_A6="2" if B1_04=="3" | B1_04 =="4" | B1_04 == "5" | B1_04 =="6" |B1_04 =="7"
replace G7_A6="1" if B1_04=="2"

图片链接在这里 [1]:https://i.stack.imgur.com/Yv7RI.png

【问题讨论】:

标签: loops stata data-manipulation


【解决方案1】:

您不需要为此使用循环程序,因为每个关系都是特定于行的。您使用的代码可以解决您的问题,但有点麻烦。更简洁的版本是:

replace G7_A6 = 2 if B1_04 != 1 | B1_04 != 2
replace G7_A6 = 1 if B1_04 == 1 | B1_04 == 2

这将为您提供以下数据:

id name B1_04 G7_A6
1 sam 2 1
1 margaret 1 1
9 Jim 5 2
9 Cinderella 1 1

你也没有发布问题:你只是说你需要一个程序来完成你已经发布的事情。

【讨论】:

  • 还要注意inlist() 的使用范围,如!inlist(B1_04, 1, 2)。 OP 的代码暗示该变量是字符串,但同样适用于!inlist(B1_04, "1", "2")
  • 正确,我在 stata 测试时遗漏了一些东西。我只是认为将整数列表不必要地编码为字符串是很疯狂的。不过很难评论,因为这个问题太“神秘”了,因为没有更好的词。
  • 我们真的不知道。也许 OP 确实需要并且确实有更复杂的字符串,并且只是展示了一个简单的示例。其他受欢迎的理由/
  • 我想使用替换命令(条件)为男性的 sam、Jim、George 等更改 G7_A6,这样 Margaret、Cinderella、Natalie 等(女性)的 G7_A6 也取值Sam、Jim、George 等。女性的 B1_04 始终为 1,而男性的 B1_04 的值从 2 到 7 不等。我希望这次我说得更清楚了。这种操作在STATA中是否可行
  • 如果 ID=1 和 Name = Sam 的 G7_A6 =1,那么对于 ID=1 和 Name=Margaret,G7_A6 应该自动等于 1。对于其他 ID,依此类推
猜你喜欢
  • 2011-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
相关资源
最近更新 更多