Stata 从长变长
我正在尝试将Stata中的数据集重塑为长格式 然而,原始数据集已经是一个很长的格式,每个给定的个体都有多个观测值。每行包含给定学生在给定年份进行的所有测试 我想要的是每一行包含给定年份中特定测试的数据 例如,从该数据集中:Stata 从长变长,stata,reshape,Stata,Reshape,我正在尝试将Stata中的数据集重塑为长格式 然而,原始数据集已经是一个很长的格式,每个给定的个体都有多个观测值。每行包含给定学生在给定年份进行的所有测试 我想要的是每一行包含给定年份中特定测试的数据 例如,从该数据集中: +---------------------------------------------------------------------------+ | student_id | year | score_math | date_math | score_eng
+---------------------------------------------------------------------------+
| student_id | year | score_math | date_math | score_english | date_english |
|------------+------+------------+-----------+---------------+--------------|
| 111 | 2011 | . | | . | |
| 111 | 2013 | 259 | apr | 250 | apr |
| 222 | 2012 | 645 | mar | 645 | mar |
| 222 | 2014 | 640 | dec | . | |
| 333 | 2016 | . | | 358 | apr |
| 333 | 2017 | . | | 299 | jan |
+---------------------------------------------------------------------------+
我想得到下面的一个:
+----------------------------------------------+
| student_id | year | test_name | score | date |
|------------+------+-----------+-------+------|
| 111 | 2011 | english | . | |
| 111 | 2011 | math | . | |
| 111 | 2013 | english | 250 | apr |
| 111 | 2013 | math | 259 | apr |
| 222 | 2012 | english | 645 | mar |
| 222 | 2012 | math | 645 | mar |
| 222 | 2014 | english | . | |
| 222 | 2014 | math | 640 | dec |
| 333 | 2016 | english | 358 | apr |
| 333 | 2016 | math | . | |
| 333 | 2017 | english | 299 | jan |
| 333 | 2017 | math | . | |
+----------------------------------------------+
我已尝试运行以下命令,但由于数据太长,该命令无效:
reshape long score* date*, i(student_id) j(test_name)
我得到的是以下信息:
变量test_name包含所有缺少的值
所以我试着:
reshape wide score* date*, i(student_id) j(year)
接下来,为了“假装”我的数据很长(以便我能够重塑长数据),我使用了:
每次观察都有一个唯一的新id
,然后我尝试:
reshape long score* date*, i(new_id) j(test_name)
这也不管用
关于如何获得所需输出的任何建议?以下内容产生所需输出:
clear
input student_id year score_math str3 date_math score_english str3 date_english
111 2011 . " " . " "
111 2013 259 "apr" 250 "apr"
222 2012 645 "mar" 645 "mar"
222 2014 640 "dec" . " "
333 2016 . " " 358 "apr"
333 2017 . " " 299 "jan"
end
reshape long score_ date_, i(student_id year) j(test_name) string
rename *_ *
list, sepby(student_id) abbreviate(30)
+----------------------------------------------+
| student_id year test_name score date |
|----------------------------------------------|
1. | 111 2011 english . |
2. | 111 2011 math . |
3. | 111 2013 english 250 apr |
4. | 111 2013 math 259 apr |
|----------------------------------------------|
5. | 222 2012 english 645 mar |
6. | 222 2012 math 645 mar |
7. | 222 2014 english . |
8. | 222 2014 math 640 dec |
|----------------------------------------------|
9. | 333 2016 english 358 apr |
10. | 333 2016 math . |
11. | 333 2017 english 299 jan |
12. | 333 2017 math . |
+----------------------------------------------+
请不要发布单独的图片
ssc inst dataex
提供一个命令,用于发布其他人可以复制和粘贴的数据集,以显示代码。请注意,重塑long
不接受带有通配符的变量列表;它需要变量名存根。
clear
input student_id year score_math str3 date_math score_english str3 date_english
111 2011 . " " . " "
111 2013 259 "apr" 250 "apr"
222 2012 645 "mar" 645 "mar"
222 2014 640 "dec" . " "
333 2016 . " " 358 "apr"
333 2017 . " " 299 "jan"
end
reshape long score_ date_, i(student_id year) j(test_name) string
rename *_ *
list, sepby(student_id) abbreviate(30)
+----------------------------------------------+
| student_id year test_name score date |
|----------------------------------------------|
1. | 111 2011 english . |
2. | 111 2011 math . |
3. | 111 2013 english 250 apr |
4. | 111 2013 math 259 apr |
|----------------------------------------------|
5. | 222 2012 english 645 mar |
6. | 222 2012 math 645 mar |
7. | 222 2014 english . |
8. | 222 2014 math 640 dec |
|----------------------------------------------|
9. | 333 2016 english 358 apr |
10. | 333 2016 math . |
11. | 333 2017 english 299 jan |
12. | 333 2017 math . |
+----------------------------------------------+