Сначала вам нужно ввести идентификаторы в Stata и сохранить их в файле dta
:
clear
input id
0234
6232
6953
9586
4198
end
list
+------+
| id |
|------|
1. | 234 |
2. | 6232 |
3. | 6953 |
4. | 9586 |
5. | 4198 |
+------+
save identifiers, replace
Предполагая, что данные типа json сохраняются в файле с именем interviews.txt
, вы можете импортироватьв строковую переменную, используя команду import delimited
:
import delimited interviews.txt, rowrange(2) delimiter("},", asstring) clear
drop v2
list
+-------------------------------------------------+
| v1 |
|-------------------------------------------------|
1. | 4582058":{"date":24oct2015,"status":completed |
2. | 2045873":{"date":12nov2015,"status":unclear |
3. | 5969361":{"date":19dec2015,"status":pending |
4. | 4969210":{"date":7jan2016,"status":completed}}} |
+-------------------------------------------------+
Затем вы можете использовать комбинацию строковых функций , чтобы извлечь информацию в отдельных переменных:
generate interview = substr(v1, 1, strpos(v1, ":") - 2)
generate date = substr(v1, ustrrpos(v1, ":", 25) + 1, strpos(v1, ",") - ustrrpos(v1, ":", 25) - 1)
generate status = subinstr(substr(v1, strrpos(v1, ":") + 1, .), "}", "", .)
list, abbreviate(10)
+-------------------------------------------------------------------------------------+
| v1 interview date status |
|-------------------------------------------------------------------------------------|
1. | 4582058":{"date":24oct2015,"status":completed 4582058 24oct2015 completed |
2. | 2045873":{"date":12nov2015,"status":unclear 2045873 12nov2015 unclear |
3. | 5969361":{"date":19dec2015,"status":pending 5969361 19dec2015 pending |
4. | 4969210":{"date":7jan2016,"status":completed}}} 4969210 7jan2016 completed |
+-------------------------------------------------------------------------------------+
drop v1
Этот подход прост и позволяет переменному содержимому id
, date
и status
иметь различную длину.
После завершения этих шагов вы можете использовать cross
Команда для получения желаемого результата:
cross using identifiers
order id
sort id interview
list, abbreviate(10) sepby(id)
+------------------------------------------+
| id interview date status |
|------------------------------------------|
1. | 234 2045873 12nov2015 unclear |
2. | 234 4582058 24oct2015 completed |
3. | 234 4969210 7jan2016 completed |
4. | 234 5969361 19dec2015 pending |
|------------------------------------------|
5. | 4198 2045873 12nov2015 unclear |
6. | 4198 4582058 24oct2015 completed |
7. | 4198 4969210 7jan2016 completed |
8. | 4198 5969361 19dec2015 pending |
|------------------------------------------|
9. | 6232 2045873 12nov2015 unclear |
10. | 6232 4582058 24oct2015 completed |
11. | 6232 4969210 7jan2016 completed |
12. | 6232 5969361 19dec2015 pending |
|------------------------------------------|
13. | 6953 2045873 12nov2015 unclear |
14. | 6953 4582058 24oct2015 completed |
15. | 6953 4969210 7jan2016 completed |
16. | 6953 5969361 19dec2015 pending |
|------------------------------------------|
17. | 9586 2045873 12nov2015 unclear |
18. | 9586 4582058 24oct2015 completed |
19. | 9586 4969210 7jan2016 completed |
20. | 9586 5969361 19dec2015 pending |
+------------------------------------------+