我想將我Ucod在 Stata 中的變數用 >100000 個不同的觀察值重新編碼為新變數形式的 3-4 個分類值。
問題是我不想輸入所有的值Ucod來重新編碼。例如,我想使用一個if條件,例如,如果任何值以(例如,、、 )Ucod開頭,則將整個值重新編碼為。II234I345I587CVD
我嘗試過使用strpos()不同條件的函式,但沒有成功。
附上我的資料和變數的圖片Ucod

uj5u.com熱心網友回復:
您可以使用gen一系列replace命令:
gen ucod_category = 0 if ucod >= "I00" & ucod <= "I519"
replace ucod_category = 1 if ucod >= "I60" & ucod <= "I698"
然后將這些類別標記為 CVD、中風等。對于缺少小數點的 I10 代碼(例如“I519”<“I60”),這應該以預期的方式排序。
但是,將其轉換為數字可能更方便ucod(A 的第一個數字為 0,B 的第一個數字為 1 等),以便您可以在單個命令中使用標簽對其進行重新編碼:
gen ucod_numeric = (ascii(substr(ucod, 0, 1)) - 65) * 1000 real(substr(ucod, 1)) / cond(strlen(ucod) == 4, 10, 1)
recode ucod_numeric (800/851.9=0 "CVD") (860/869.8=1 "Stroke"), generate(ucod_category)
同樣,這應該按預期的順序排序:I519(變為 851.9)< I60 (860)。
編輯:由于ascii不起作用(可能是Stata版本問題),您可以嘗試這樣的方法將字母更改為數字。
gen ucod_letter_code = -1
forvalues i = 0/25 {
replace ucod_letter_code = `i' if substr(ucod, 1) == char(`i' 65)
}
gen ucod_numeric = ucod_letter_code * 1000 real(substr(ucod, 1)) / cond(strlen(ucod) == 4, 10, 1)
recode ucod_numeric (800/851.9=0 "CVD") (860/869.8=1 "Stroke"), generate(ucod_category)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/526376.html
標籤:排序代替状态重新编码
