【问题标题】:Stata - Spin on ReshapeStata - 重塑旋转
【发布时间】:2026-02-16 04:15:01
【问题描述】:
我正在对文件进行整形,想知道 Stata 如何处理以下格式的文件。例如,使用来自比赛的数据。
Race_Number Race_Date Racer_1_Name Racer_2_Name Racer_3_Name Racer_1_Position Racer_2_Position Racer_3_Position
是否可以将其转换为以下内容。
Race_Number Race_Date Racer_Name Racer Position
出于好奇,我创建了上述数据集,reshape 不起作用,我不得不手动操作。
【问题讨论】:
-
正如@Roberto Ferrer 所说,这是一个糟糕的问题。您没有向我们展示的代码“不起作用”。实际上,按照标准标准,这是题外话:“要求代码的问题必须证明对正在解决的问题有最低限度的理解。包括尝试的解决方案、它们为什么不起作用以及预期的结果。” *.com/help/on-topic(具体来说,“比赛日期”也不是合法的变量名。)
标签:
formatting
stata
reshape
【解决方案1】:
感谢您准确地向我们展示您的输入/输出是什么。像
...reshape 不起作用,我不得不手动操作。
不要告诉我们太多。
此外,完整玩具数据集也会有所帮助。我假设您的意思是Race_Date,您在其中输入了Race Date(第一个代码行)和Racer_Position,您在其中输入了Racer Position(第二个代码行)。
你可以试试
clear all
set more off
*----- example dataset -----
input ///
Race_Num Race_Dat str5(R1_Name R2_Name R3_Name) R1_Pos R2_Pos R3_Pos
1 5 "Al" "Bob" "Carl" 3 2 1
2 7 "Al" "Bob" "Carl" 3 1 2
3 15 "Al" "Bob" "Carl" 1 2 3
end
format Race_Dat %td
list
*----- what you want -----
forvalues i = 1/3 {
rename R`i'_Name Nam_R`i'
rename R`i'_Pos Pos_R`i'
}
list
reshape long Pos_R Nam_R, i(Race_Num) j(Racer)
order Race_Num Race_Dat
list, sepby(Race_Num)
我所做的只是在reshape 之前更改变量名。
更好的方法是使用@,然后就不需要重命名变量了:
reshape long R@_Pos R@_Name, i(Race_Num) j(Racer)