I would like to generate my Outcome y (as continuous variable) and then split them into 5 item-variables.
After that I would like to re-check if sum_item(after split) is equal to y, if not, then Looping should run again until the condition meet (y=sum_item)
The Problem is I will Always get at least 1 case that diff (y-sum_item) is not 0, so it means my Looping command doesn't work in this condition
and I don't know where is the failure on my Code.
Code:
*Example data
. list y item1 item2 item3 item4 item5 sum_item in 1/5
+-------------------------------------------------------+
| y item1 item2 item3 item4 item5 sum_item |
|-------------------------------------------------------|
1. | 14 4 2 4 3 1 14 |
2. | 16 2 1 4 4 5 16 |
3. | 17 3 4 3 4 3 17 |
4. | 17 3 1 4 4 5 17 |
5. | 18 5 4 3 5 1 18 |
+-------------------------------------------------------+
*Generate Outcome y
generate y = round(rnormal(20, 5))
*Generate each item
forvalues k = 1(1)5 {
gen item`k' = runiform(1, 5)
replace item`k' = round(item`k')
}
egen sum_item=rowtotal(item1 item2 item3 item4 item5)
gen diff = y - sum_item
*Looping check if y=sum_item
forvalues a = 1(1)`=_N' {
if run[`a']==`a' {
forvalues k = 1(1)5 {
replace sum_item=. if sum_item!=y[_n]
replace item`k' =. if sum_item==.
replace item`k' = runiform(1, 5) if item`k'==.
replace item`k' = round(item`k')
replace sum_item= item1 + item2+item3+item4+item5 if sum_item==.
replace diff = y - sum_item
}
}
}
*Result after running Looping
. tab diff
diff | Freq. Percent Cum.
------------+-----------------------------------
0 | 494 98.80 98.80
6 | 1 0.20 99.00
8 | 2 0.40 99.40
10 | 1 0.20 99.60
12 | 1 0.20 99.80
14 | 1 0.20 100.00
------------+-----------------------------------
Total | 500 100.00
0 Response to Looping with condition
Post a Comment