2015-09-08 2 views
0

У меня есть два больших набора данных (более 1000 переменных в каждом), один из которых имеет все переменные второго и дополнительные переменные. Я хотел бы получить список всех этих дополнительных переменных, а затем удалить их и добавить один набор данных к другому. Я попробовал команду dta_equal, но получил тот же проблема здесь: http://www.stata.com/statalist/archive/2011-08/msg00308.htmlStata: сравнить два набора данных и сбросить разные переменные

Я думаю append, keep() не могу понять, что я хочу сделать сразу, то есть, не может добавлять набор данных то время как падение дополнительных переменных, так как я должен вручную ввести переменные одного по одному в опции keep(), что нереалистично, учитывая мой большой набор данных.

Есть ли способы справиться с этим?

+0

Проверить 'ssc описать cfvars'. –

ответ

1

Существует несколько команд Stata, которые могут быть полезны здесь.

Команда unab используется в первом примере для создания списка переменных в наборе данных с меньшим количеством переменных. Во втором и третьем примерах используется команда describe для получения списка переменных в наборе данных, который в настоящее время не хранится в памяти.

В последней части пример показывает, как использовать расширенные функции списка макросов, чтобы получить список общих переменных и набор переменных, не являющихся общими для обоих наборов данных.

* simulate 2 datasets, one has more variables than the other 
sysuse auto, clear 
save "data1.dta", replace 
gen x = _n 
gen y = -_n 
save "data2.dta", replace 

* example 1: drop after append 
use "data1.dta", clear 
unab vcommon : * 
gen source = 1 
append using "data2.dta" 
replace source = 2 if mi(source) 
keep `vcommon' source 

* example 2: drop first then append 
clear 
describe using "data1.dta", varlist short 
local vcommon `r(varlist)' 
use `vcommon' using "data2.dta", clear 
gen source = 2 
append using "data1.dta" 
replace source = 1 if mi(source) 

* example 3: append and keep on the fly 
use "data1.dta", clear 
unab vcommon : * 
gen source = 1 
append using "data2.dta", keep(`vcommon') 
replace source = 2 if mi(source) 

* use extended macro list functions to manipulate variable list 
clear 
describe using "data1.dta", varlist short 
local vlist1 `r(varlist)' 
describe using "data2.dta", varlist short 
local vlist2 `r(varlist)' 
local vcommon : list vlist1 & vlist2 
local vinonly1 : list vlist1 - vlist2 
local vinonly2 : list vlist2 - vlist1 
dis "common variables = `vcommon'" 
dis "variables in data1 not found in data2 = `vinonly1'" 
dis "variables in data2 not found in data1 = `vinonly2'" 
+0

Спасибо @RobertPicard. Это действительно информативно. – Chen

Смежные вопросы