2015-12-10 38 views
0

我想將國家代碼列表轉換爲數值以用於迴歸分析。例如,所有說「美國」的國家代碼都得到1,「DE」得到2,「FR」得到3等等,而不使用「不同」。國家代碼爲PostgreSQL中的數值

我試着投功能:

cast(countrycode as numeric(1)) 

但它沒有工作,我不想用IF函數做在Excel 7000倍的值。

我已經有一個國家代碼列表。我只是想加入數值反對,所以當我檢索數據,它表明這樣的:

US | 1 
FR | 2 
DE | 3 
US | 1 
NL | 4 
FR | 2 

144(不同的)國家代碼..

+2

創建一個查找表,其中包含從代碼到數字的映射,然後將您的表加入該查找表 –

+0

corax228如果您沒有超過10個不同代碼的情況,那麼第一個建議就足夠了,否則sql將無法讀取。如果你不止這些,你可以寫一個小的。函數來簡化你的sql,或者你可以製作一個國家代碼表並加入它。 –

+0

我已經有一個國家代碼列表。我只想加入數值,因此當我檢索數據時,它顯示如下: US | 1 FR | 2 DE | 3 美國| 1 NL | 4 FR | 2 針對144個不同的國家/地區代碼。 – Naj

回答

0

如果你肯定知道的國家都在順序,或者你只是想指定任意整數值,您可以創建一個枚舉類型:

create type country as enum ('US', 'DE', 'FR'); 

當您插入字符串,你可以將它們轉換成類型值: 選擇「美國」 ::國家; 「US」

內部,這些被視爲序列號:

select enumlabel, enumsortorder 
from pg_enum e join pg_type t on e.enumtypid = t.oid 
where typname = 'country' 

如果你正在做的迴歸上查詢時,您可以將其加入到這個做查找。