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
的工作方式有所不同?
答案 0 :(得分:0)
您不需要循环显示您想要的内容。请参阅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
也可以找到第一个这样的观察结果。