2014-11-12 3 views
-1

변수 세트를 확인하고 값을 바꿔야 할 상황이 있습니다. 예를 들어, 세 변수 a, b, c이 있다고 가정합니다. c 또는 b 또는 a == 1 인 경우 변수 z = 1을 만들어야합니다.Stata는 if 문을 사용합니다.

다른 말로하면 c이 1인지 확인하기 위해 c을 체크하는 if 루프를 생성해야합니다. 그렇지 않다면 b이 1인지 확인하고 싶습니다. 하지 a은 1입니다 그리고 c가 1이면 다음 루프 중지해야 또는 b가 1 인 경우는 a 확인에서 중지해야합니다.

내 코드이 코드는 내가 필요로하고 내가 주위에 내 머리를 정리 할 수없는 일을하지

gen z=. 
foreach var in c b a{ 
if `var'=1 & z!=. { 
replace z=1 
} 
else 
z=. 
} 
} 

입니다. 나는 조건을 동시에

(a==1|b==1|c==1) 

를 확인이 코드이

replace z=1 if (a==1|b==1|c==1) 

처럼하지만 내 이해에 명령을 사용할 수 있습니다 이해합니다. 루프마다 각 변수를 확인해야합니다. abc 단계별로.

+0

귀하의 앞의 두 질문은 여전히 ​​열려있는 것으로 보인다. 답변에 대한 답변이나 의견에 대한 회신을 부탁드립니다. –

+0

검사 된 변수가 1 인 순서가 어떤 차이가 있습니까? 항상 'z'에 1을 넣습니다. –

답변

1

이 혼란 또는 여러 수준에 대한 혼란이다.

(0) 데이터 집합에서 1이 처음 발생하는시기에 따라 문제가 내부에 묻혀있는 것처럼 보입니다. 그렇다면 철자를 분명히해야합니다.

(1) 당신은 (당신이 끝나는대로) a, b 또는 c 중 하나가

replace z = 1 if a == 1 | b == 1 | c == 1 

또는 대안이, 올바른 코드가 될 수 있습니다 1. 경우 새 값 1을한다고 말함으로써 시작

replace z = 1 if inlist(1, a, b, c) 

하지만 당신은 그것이 당신이 원하고 루프에 대해 말하는 것을 부정합니다. 그러나 당신이 제기 한 문제를 해결하기 위해 반복 할 필요가 없습니다.

(2) 사용하는 더 긴 코드 세그먼트에는 불법적 인 진술이 포함되어있어 실행할 수 없습니다. 또한 원하지 않는 명령 인 if과 사용자가 원할 수도있는 if 한정자를 (거의 확실하게) 혼동합니다. this FAQ for explanation

(3) 게시물에 이미 여러 번 수정되었으므로 올바른 철자는 "STATA"가 아닌 "Stata"입니다. 가장 간단한 설명에주의하십시오.

(4) 최소 재생산의 원칙에 유의하십시오. https://stackoverflow.com/help/mcve

관련 문제