Variables 相对于另一个变量对Stata变量重新排序
我有这些数据:Variables 相对于另一个变量对Stata变量重新排序,variables,stata,Variables,Stata,我有这些数据: Node Time Reorder Node 201 8:00:00 395 395 8:10:00 405 280 7:50:00 280 405 8:30:00 201 我需要复制名为“Time”的向量,并对其重新排序,以便保留前两列中节点编号和时间之间的关系。换言之,我想以这样的方式结束: Node Time Reorder Node Reorder time 201 8:00:00 395
Node Time Reorder Node
201 8:00:00 395
395 8:10:00 405
280 7:50:00 280
405 8:30:00 201
我需要复制名为“Time”的向量,并对其重新排序,以便保留前两列中节点编号和时间之间的关系。换言之,我想以这样的方式结束:
Node Time Reorder Node Reorder time
201 8:00:00 395 8:10:00
395 8:10:00 405 8:30:00
280 7:50:00 280 7:50:00
405 8:30:00 201 8:00:00
在斯塔塔这可能吗?我一直在研究排序、稳定排序和按排序排序,但它们似乎不适合这一点
谢谢
我将有一种聪明的方法,它基于将此数据集的一个版本与其自身进行
合并
,应该会有人乐意向您展示
我将向你们展示一个非常普通的方法,它可能有一个优点,即它是相当透明的
我假设您的变量被称为node
、time
和node2
,并且您的time
是一个字符串变量
首先,我们将观察值放入一个变量中:
gen long obs = _n
然后我们初始化一个新的时间变量。如果时间
为数字,则初始化应改为数字缺失:
gen time2 = ""
现在我们循环观察。对于每个观察,我们找出哪个观察编号包含新节点编号的数据,然后使用该观察的time
值
quietly forval i = 1/`=_N' {
su obs if node == node2[`i'], meanonly
replace time2 = time[r(min)] in `i'
}
r(min)
在summary
之后保留在内存中:它是最小值,如果每个节点在数据中精确出现一次,它将是我们想要的值r(max)
甚至r(mean)
也同样有效`=_N'动态计算数据集中的观察数 这里有一个合并解决方案。我将您的玩具数据集放入ds1.dta
. use ds1, clear
. list
+------------------------+
| node time node2 |
|------------------------|
1. | 201 8:00:00 395 |
2. | 395 8:10:00 405 |
3. | 280 7:50:00 280 |
4. | 405 8:30:00 201 |
+------------------------+
. rename (node node2 time) (node2 node time2)
. merge 1:m node using ds1
Result # of obs.
-----------------------------------------
not matched 0
matched 4 (_merge==3)
-----------------------------------------
. list
+------------------------------------------------+
| node2 time2 node time _merge |
|------------------------------------------------|
1. | 405 8:30:00 201 8:00:00 matched (3) |
2. | 280 7:50:00 280 7:50:00 matched (3) |
3. | 201 8:00:00 395 8:10:00 matched (3) |
4. | 395 8:10:00 405 8:30:00 matched (3) |
+------------------------------------------------+
重命名
语法采用Stata 12。在Stata 11或更早版本中,使用单个重命名
s或renvars
(Stata日志) 谢谢你,尼克!事实上,我描述的第一个数据集是合并的结果,因此我想到了基于变量“reorder node”进行第二次合并。每个节点在数据中出现很多次,因此两次合并可能是最好的方式。只要每个节点的多个观测值的时间是恒定的,上述方法应该可以很好地工作。只需使用r(最小值)
或r(最大值)
;不要使用r(平均值)
,它可能是非整数和/或与适当的观察值不对应。因此,如果节点出现在观测值42和44中,则平均值43将不是要使用的观测值,但42或44将很好。