2015-10-24 4 views
0

Я пытаюсь объединить два набора данных в stata. Чтобы построить совпадение 1: 1, я создаю переменную, которая умножает год и идентификатор. В идеале я хотел бы, чтобы он выглядел как 2004000000023. Однако для must of the variables число выходит из значительно другого числа (например, year = 2000, cik = 1961 дает year_cik 1999999991808). Я попытался изменить формат на% 15.0f, но это не сработало. Какие-либо предложения? Я скопировал свой код ниже:Stata: Ошибка при вычислении большой цифровой переменной

use "/Users//Desktop/Research/13D.dta", clear 
gen year= year(rep_file_date) 
destring company_fkey, replace 
format company_fkey %15.0f 
recast float company_fkey 
destring year, replace 
format year %15.0f 
gen year_cik =. 
format year_cik %15.0f 
replace year_cik = company_fkey + (year * (10^9)) 
save "/Users//Research/13D_edited.dta", replace 

use "/Users//Desktop/Research/Crosswalk.dta" 
destring cik, replace 
format cik %15.0f 
destring fyear, replace 
format fyear %15.0f 
destring gvkey, replace 
format gvkey %15.0f 
gen year_cik = cik + (fyear * (10^9)) 
format year_cik %15.0f 
gen year_gvkey = gvkey + (fyear * (10^8)) 
format year_gvkey %15.0f 
save "/Users//Desktop/Research/CrossWalk_edited.dta", replace 

use "/Users//Desktop/Research/Share_Retainer.dta" 
destring year, replace 
format year %15.0f 
destring gvkey, replace 
format gvkey %15.0f 
gen year_gvkey = gvkey + (year * (10^8)) 
format year_gvkey %15.0f 
save "/Users//Desktop/Research/SR_edited.dta", replace 


use "/Users//Desktop/Research/13D_edited.dta" 
merge 1:1 year_cik using "/Users//Desktop/Research/CrossWalk_edited.dta" 
rename _merge first_merge 

merge 1:1 year_gvkey using "/Users//Desktop/Research/SR_edited.dta" 
rename _merge second_merge 

Спасибо!

ответ

2

Вы пытаетесь построить число с более значительными цифрами, которое может предоставить Stata. Подробнее см. Результаты help data types.

Но почему вы преобразовываете строки в числа? Создайте строку с годом и соедините ее с gvkey для создания строкового идентификатора.

Но почему вы комбинируете год и gvkey в одну переменную? Я думаю, вы неправильно поняли, что подразумевается под игрой 1: 1. Ваше заявление о слиянии можно было бы написать:

merge 1:1 year gvkey ... 

используя две переменные в качестве ключа. Значение 1: 1 означает, что 1 наблюдение в вашем базовом наборе данных соответствует одному наблюдению в вашем используемом наборе данных и не имеет никакого значения для количества переменных, используемых в качестве ключа. Требуется, чтобы комбинация года и gvkey однозначно определяла наблюдения в каждом наборе данных.

+1

Отличный совет. Некоторое чтение источников, найденных с помощью «точности поиска», необходимо для полного понимания. Неверно предположить, что изменение формата отображения может иметь какой-либо эффект, изменяя то, что хранится, неправильное представление, адресованное по адресу http://www.stata-journal.com/article.html?article=dm0067. Представьте, например, что вы выбираете формат с 1 десятичное место; если бы это изменило то, что было сохранено, то изменение округления до двух знаков после запятой было бы невозможно, но не так. Кроме того, форматы отображения обычно десятичные, но Stata обязательно использует двоичные представления для хранения. –