Проблема в том, что в ваших исходных данных у вас есть коды лекарств в DrugList
, которые содержат десятичные числа, отрицательные значения или даже оба. Stata не считает их допустимыми для имен переменных.
Рассмотрим следующий игрушечный пример, основанный на слегка измененной версии данных в вашем вопросе:
clear
input DrugList Drug1 Drug2 Drug3 Drug4 Drug5
1234 7934 1234 . . .
5678 1234 5678 . . .
9876 9876 3456 . . .
3456.46 9876 . . . .
7934 9876 5678 7934 1234 .
17453 5678 . . . .
end
levelsof DrugList, clean
foreach drug in `r(levels)' {
egen d_`drug' = anycount(Drug1-Drug5), values(`drug')
}
d_3456.4599609375 invalid name
r(198);
Решение, которое не требует удаления оскорбительных наблюдений, заключается в использовании функции floor()
:
clear
input DrugList Drug1 Drug2 Drug3 Drug4 Drug5
1234 7934 1234 . . .
5678 1234 5678 . . .
9876 9876 3456 . . .
3456.46 9876 . . . .
7934 9876 5678 7934 1234 .
17453 5678 . . . .
end
levelsof DrugList, clean
foreach drug in `r(levels)' {
local drug = floor(`drug')
egen d_`drug' = anycount(Drug1-Drug5), values(`drug')
}
Если у вас есть отрицательные значения в DrugList
, вы можете использовать функцию abs()
вместо:
clear
input DrugList Drug1 Drug2 Drug3 Drug4 Drug5
1234 7934 1234 . . .
5678 1234 5678 . . .
9876 9876 3456 . . .
-3456 9876 . . . .
7934 9876 5678 7934 1234 .
17453 5678 . . . .
end
levelsof DrugList, clean
foreach drug in `r(levels)' {
local drug = abs(`drug')
egen d_`drug' = anycount(Drug1-Drug5), values(`drug')
}
Конечно, вы также можете комбинировать вышеупомянутые функции:
clear
input DrugList Drug1 Drug2 Drug3 Drug4 Drug5
1234 7934 1234 . . .
5678 1234 5678 . . .
9876 9876 3456 . . .
-3456.46 9876 . . . .
7934 9876 5678 7934 1234 .
17453 5678 . . . .
end
levelsof DrugList, clean
foreach drug in `r(levels)' {
local drug = abs(floor(`drug'))
egen d_`drug' = anycount(Drug1-Drug5), values(`drug')
}
Результаты во всех случаях ожидаемые:
list, separator(0)
+------------------------------------------------------+
| d_3456 d_1234 d_5678 d_7934 d_9876 d_17453 |
|------------------------------------------------------|
1. | 0 1 0 1 0 0 |
2. | 0 1 1 0 0 0 |
3. | 1 0 0 0 1 0 |
4. | 0 0 0 0 1 0 |
5. | 0 1 1 1 1 0 |
6. | 0 0 1 0 0 0 |
+------------------------------------------------------+