显示或打印循环变量以进行调试


ID  A1  A2  A3
1001    ABD AAA ABC
1002    ABE BBB CCC
1003    ABC CCC DDD

我有一个循环如下:

generate trackr = 0
display "generated trackr"
foreach var of varlist a1 a2 a3{
display "`var'" id[_n]
replace trackr = 1 if (`var'=="ABC")
}

在 Stata 中,我想找出并打印何时对trackr进行更改.(我想找出在哪一行/列中发现了"ABC"。

我尝试了上述id[_n],它只能部分工作。

我想仅显示id[_n]if var=="ABC"并将trackr更改为 1(从 0(。 我尝试将所有内容都放在一个if块中,但我认为 Stata 中的if的工作方式不同?

你不需要循环来表示你似乎想要的东西。请参阅 SSC 的dataex,了解在 Stata 问题中提供示例数据的更好方法。

clear
input ID  str3 (A1  A2  A3) 
1001    ABD AAA ABC
1002    ABE BBB CCC
1003    ABC CCC DDD
end 
gen trackr = inlist("ABC", A1, A2, A3) 
list if inlist("ABC", A1, A2, A3) 
+---------------------------------+
|   ID    A1    A2    A3   trackr |
|---------------------------------|
1. | 1001   ABD   AAA   ABC        1 |
3. | 1003   ABC   CCC   DDD        1 |
+---------------------------------+

在这里,如果第二个和后面的参数中的任何一个等于第一个参数,则inlist()产生 1,否则为 0。

在您的循环中,像display A1[_n]这样的东西只会显示第一个观测值,因为您循环遍历变量,而不是观测值。但是不需要循环。

如果你只希望看到满足你的标准的第一个观察结果,一种方法是

. list if trackr & sum(trackr) == 1
+---------------------------------+
|   ID    A1    A2    A3   trackr |
|---------------------------------|
1. | 1001   ABD   AAA   ABC        1 |
+---------------------------------+

因此,list if sum(inlist("ABC", A1, A2, A3)) == 1也将努力找到第一个这样的观察结果。

相关内容

  • 没有找到相关文章

最新更新