Liebe Mitglieder des Stata-Forums,
ich habe folgendes Problem. Ich betrachte u.a. Temperaturdaten von Wetterstationen, die ich über Geo-Koordinaten den entsprechenden Wahlkreisen zugeordnet habe. Die Wetterdaten liegen täglich vor (hier vereinfacht zwei Tage: temp_a22312 und temp_a22313). Nun möchte ich die Information der drei nächstgelegenen Wetterstationen nutzen, um einen Temperatur-Durchschnittswert für jene Wahlkreise zu bilden, in denen keinen Stationen liegen (station==.) oder die fehlende Werte aufweisen (districts_to_check==1). Wenn ich allerdings den untenstehenden Code anwende, dann werden für jeden fehlenden Wahlkreise die gleichen Temperatur-Daten errechnet und eingesetzt. Ich glaube, es liegt an der falsch formulierten Bedingung. Allerdings habe ich nach mehrmaligem Ausprobieren keine Lösung finden können. Ich wäre euch sehr dankbar um jede Hilfe. Die Daten sehen folgendermaßen aus. In Wahlkreis 18 liegt beispielsweise keine Station.
district closest_station1 closest_station2 closest_station3 station temp_a22312 temp_a22313
1 1130 4466 1379 1266 -4.9 -4
2 7298 4919 1963 4919 . .
3 19172 2429 1451 2429 -4.6 -3.2
4 6105 2303 2437 5930 -2 -3.3
5 2564 2961 6105 2564 -2.9 -3.1
6 6163 2564 2306 6163 -3.5 -3.2
7 4039 1975 4857 2115 -2.7 -1.8
8 5280 7427 4039 5280 -5 -3
9 3897 5877 2306 5877 . .
10 1736 591 3086 1736 -5.4 -2.4
11 3086 5078 1736 3086 -5.3 -2.7
12 4625 591 1736 591 -5.7 -2.6
13 4625 1694 5624 1694 -3.8 -2.1
14 1803 4271 2796 4271 -4.5 -2.3
15 6199 298 5097 6199 -4.3 -2.2
16 167 5142 5109 167 -4.4 -1.8
17 5349 5009 15189 15189 . .
18 1975 1981 2465 . . .
19 2465 1981 1975 . . .
20 1975 4039 1981 . . .
21 1975 4039 1981 1975 -5.3 -2.5
22 1975 1981 4039 . . .
23 1981 760 1975 1981 -5.8 -2.4
24 5839 5640 3631 5839 -5.8 -2.6
25 3867 6159 1503 1792 -3.9 -2.3
26 5640 6157 5344 5640 -5.9 -3
27 1503 44 642 . . .
28 642 44 691 44 -4.9 -2.1
29 4841 3639 701 1451 -5 -3.3
30 704 4857 5014 4857 -5.7 -2.6
31 3640 3254 1792 3254 -3.9 -2.3
________________________________________________________
use weather_data.dta, clear
tab district if station==. //identify districts without station
egen group_district = group(district)
egen has_missing_tmk = max(missing(temp_a22312 - temp_a22312)), by(group_district) // Identify districts with stations having missing values on temp* variables
egen has_data_tmk = max(temp_a22312 - temp_a22312 != .), by(group_district) // Identify districts with at least one station having data on temp* variables
gen districts_to_check = has_missing_tmk & !has_data_tmk & station !=. //Identify districts that meet the criteria
list district if districts_to_check
local date_list 22312 22313
levelsof district, local(district_list)
foreach district of local district_list {
gen closest_station1_`district' = closest_station1 if district == `district'
gen closest_station2_`district' = closest_station2 if district == `district'
gen closest_station3_`district' = closest_station3 if district == `district'
}
foreach district in `district_list' {
foreach date in `date_list' {
egen temp_avg`district'`date' = mean(temp_a`date') if (station == closest_station1_`district' | station == closest_station2_`district' | station == closest_station3_`district')
replace temp_a`date' = temp_avg`district'`date' if (missing(temp_a`date')) & station==. | (missing(temp_a`date')) & districts_to_check==1
}
}
Der Fehler scheint mir in den letzten beiden Zeilen zu liegen.
Viele Grüße und vielen Dank!
Jessica