Я пытаюсь 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
объединить в одно наблюдение.
Это на самом деле то, что я хочу сделать со своими данными, так что я должен делать по-другому?
@ NickCox услужливо предложил что-то вроде этого:
. 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)
Это работает в этой песочнице, но мой набор данных имеет 10 миллионов наблюдений. Если мне удастся избежать перезагрузки, я смогу сэкономить себе полчаса. Больше, если мне придется сделать это для нескольких случаев.
Будем благодарны за любые другие предложения.