仅使用“ if”折叠数据集的一个子集

时间:2018-11-19 06:49:20

标签: stata

我正在尝试仅使用collapse if if我的数据的一个子集,但它似乎丢失/崩溃的次数超出了我的预期。

在我使用if限定符的所有其他命令中,该命令仅适用于满足replace标准的数据子集,而仅保留其余数据

例如,foreign != 1不会更改. sysuse auto, clear (1978 Automobile Data) . replace mpg = 16 if foreign == 1 (22 real changes made) 的数据:

collapse

但是,似乎if适用于满足. count if mpg > -1 74 . * all the data has mpg > -1 . count if foreign == 1 22 . collapse (mean) mpg if foreign == 1 . count if mpg > -1 1 标准的数据,而删除其余的数据

collapse

在理论上replace不能以与foreign != 1相同的方式运行。可能会将所有foreign == 1的数据保留完整,而将所有. save "temp/whatever" file temp/whatever.dta saved . sysuse auto, clear (1978 Automobile Data) . drop if foreign == 1 (22 observations deleted) . append using "temp/whatever" (note: variable mpg was int, now float to accommodate using data's values) 的数据折叠为一个观测值。

这实际上是我想要处理的数据,那么我应该做些什么?

@NickCox提出了类似的建议:

jdbc:oracle:thin:192.168.1.5:1521:DCGCDB

在此沙箱中有效,但我的数据集有1000万个观测值。如果可以避免重新加载,则可以节省半小时。如果必须针对多种情况执行此操作,则更多。

还有其他建议。

1 个答案:

答案 0 :(得分:2)

collapseif的工作方式如下:

通过if条件选择的那些观测值通常(但不一定)被collapse d放入具有较少观测值的新数据集中。

那些未选择的观察消失。

在这方面说此命令是不寻常的,更不用说唯一了,这是不正确的。 contractkeep也以这种方式工作:未选择的内容消失了。 (社区经常要求将saveif一起使用:savesome是SSC的一种解决方法。)

如果您想collapse观察一些,但其他观察保持不变,则可以尝试

A。此策略

A1。 use您的数据集

A2。 keep if您想要什么不变,save这些观察

A3。再次use您的数据集

A4。 collapse品尝

A5。 append来自A2的数据集

sysuse auto, clear
keep if !foreign 
save domestic 
sysuse auto, clear
collapse mpg if foreign 
gen make = "All foreign" 
append using domestic 

或B。这个:

B1。使用(如果需要,创建)一个标识符,该标识符对于您想要保持不变的观测值是唯一的(不同),但是对于您想要的观测值collapse d

具有一个唯一值

B2。 collapse将该标识符提供给by()

sysuse auto, clear 
replace make = "All foreign" if foreign 
collapse mpg, by(make) 

尽管在这个示例中B看起来很琐碎,但对我来说,它远非显而易见,对于大型数据集,如果您想继续使用许多变量,它总是优越的。我没有针对大型数据集甚至任何数据集进行时序或内存比较的实验,因为我以前从未遇到过这个愿望。