Объединение нескольких наборов данных в один с использованием Stata - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь merge собрать полный набор данных из нескольких меньших наборов данных:

cd "\\files
use "\\files\Creatinine.dta"

*merging with report data for baseline demographics *
merge m:1 id using "Archive\Report.dta"
* keeping only those tranplanted 2002-2015 *
drop if tx1 <= date("01/01/2002", "DMY") | tx1 >= date("31/12/2015", "DMY")
drop _merge
* labelling variables *
label define org 1 "Heart" 2 "Lung" 3 "Liver" 5 "Multiple" 6 "Small Bowel" 7 
"Pancreas" 8 "Stomach" 
label values organ1 organ2 organ3 org  
label values multi1 multi2 multi3 multi4 org
label variable organ1 "First Organ"
label variable organ2 "Second Organ"
label variable organ3 "Third Organ"
label variable donor_type1 "First Donor Type"
label variable tx1 "Date of First Transplant"
label variable tx2 "Date of Second Transplant"
label variable tx3 "Date of Third Transplant"
label variable dob "Date of Birth"
label variable tx1_loc "First Transplant Location"
label variable multi1 "Multiple Organ 1"
label variable multi2 "Multiple Organ 2"
label variable multi3 "Multiple Organ 3"
label variable multi4 "Multiple Organ 4"
label variable censor_date "Censor Date"
label define loc 1 "Hospital" 
label values tx1_loc loc
label define sex1 1 "Male" 2 "Female"
label values sex sex1
label variable sex "Sex of Child"
label define donor 1 "Living" 2 "Deceased" 
label values donor_type1 donor
order dob sex tx1 tx1_loc organ1 donor_type1 multi1 multi2 multi3 multi4 organ2 tx2_date organ3 tx3_date censor_date DeathDate, after(id)


***Data Cleaning *
generate dateCollected = date(DateCollected, "DMY")**
format %tdCCYY/NN/DD dateCollected
codebook dateCollected
drop DateCollected
rename dateCollected DateCollected
order DateCollected TimeCollected, after (Test)

*dropping duplicates *
sort id DateCollected TimeCollected Result
quietly by id DateCollected TimeCollected Result: gen dup=cond(_N==1,0,_n)
drop if dup > 1
drop dup

*save *
 save "\\files\Injury.dta"

Я попал на эту строку в коде:

generate dateCollected = date(DateCollected, "DMY")

Однако, это дает мне несоответствие типов ошибка.

Я думаю, это связано с форматом даты между файлами creatinine и report.

Пожалуйста, посмотрите и посоветуйте. Большое спасибо.


DATA

Creatine.dta (показывает только один результат, несколько результатов на один идентификатор)

id      dob         sex     tx1         tx1_loc     organ1  donor_type1  censor_date    DeathDate   DateCollected   Test               Result   Units
2010003 15-Apr-07   Female  29-Jan-09   Hospital    Heart   Deceased     30-Jun-16                  12/5/2007       Creatinine,blood   25       umol/L

Screenshot of Creatinine

Report.dta (показывает только один идентификатор)

id      dob         sex  tx1        tx1_loc organ1  donor_type1 multi1  multi2  multi3  multi4  organ2  tx2_date    organ3  tx3_date censor_date DeathDate
2010003 15-Apr-07   2    29-Jan-09  1       1       2                                                                                30-Jun-16  

Screenshot of Report.dta

1 Ответ

0 голосов
/ 17 мая 2018

Обратите внимание, что проблемные поверхности после вы выполнили merge.

Вы получаете ошибку r(109), потому что вы пытаетесь generate новую переменную, используя функцию date() для числовой переменной .Эта функция требует string (переменная) в качестве входных данных.

Я не уверен, почему вы это делаете, но если вы просто хотите создать и использовать dateCollected для дальнейшей работы, в то время каксохраняя DateCollected в качестве резервной копии, вы можете просто ее клонировать:

clonevar dateCollected = DateCollected

РЕДАКТИРОВАТЬ:

Разработка моего комментария:

. clear
. set obs 1
number of observations (_N) was 0, now 1

. generate DateCollected_String = "12/05/2007"

. generate DateCollected = date(DateCollected_String, "DMY")
. format %tdDD/NN/CCYY DateCollected

. browse

. generate dateCollected = date(DateCollected, "DMY")
type mismatch
r(109);
...