以双向方式通过另一个变量重新排序面板,by() 图

问题描述

假设我制作了以下图表,显示 9 头猪的体重随时间变化:

webuse pig
tw line weight week if inrange(id,1,9),by(id) subtitle(,nospan)

enter image description here

是否可以在保留原始标签的同时通过另一个变量对面板重新排序?我可以想象定义另一个以正确方式排序的变量,然后用正确的 id 标记它,但很好奇是否有一种不那么笨拙的方法来实现这一点。

解决方法

我认为您是对的:您需要一个新的排序变量。积极地,您可以根据任何选择标准进行订购。注意用于排序的变量的关系,它总是可以通过引用原始标识符来破坏。这里我们对最终权重进行排序,默认情况下最小的优先。 (对于最大优先,否定 weight 变量。)

webuse pig,clear 
keep if id <= 9 
bysort id (week) : gen last = weight[_N]
egen newid = group(last id)
bysort newid : gen toshow = strofreal(id) + " (" + strofreal(last,"%2.1f") + ")"
* search labmask           for download links 
labmask newid,values(toshow)
set scheme s1color 
line weight week,by(newid,note("")) sort xla(1/9)

讨论此处原则的简短论文已准备好在 2021 年在 Stata 期刊上发表。