2013-04-04 31 views
0

我對自己沒有創建的數據庫工作了很多。在數據庫中,數據經常被編碼,例如男性= 1,女性= 2。我創建了很多動態報告,它們需要實際的級別名稱,而不是編碼變量的級別。我一直用手記錄變量的每個級別,但必須有一種方法以更自動化的方式來完成此操作。查找不起作用查找變量的名稱可能有所不同

的關鍵在於找出編碼實際上是在一個單獨的表此提供。當我通過RODBC將這些數據導入到R時,這些表在列(例如)Gender中包含1和2。我試圖找到一種方法,通過查找表將它們轉換爲男性和女性,並具有一些令人討厭的特徵。

在這種情況下,數據文件看起來是這樣的:

ID Gender 
1  1 
2  1 
3  2 
4  1 

和查找表會是這樣的:

Name  Code Description 
Gender  1  Male 
Gender  2  Female 
VariableX 1  whatever 
VariableX 2  whatever 
VariableX 3  whatever 

所以我想通過查找查找表的說明根據數據文件的變量名和查找表中的名稱列,使用兩個表之間的鏈接將代碼與數據$ Gender中的值匹配。我可以通過我的每個變量的運行做到這一點:

數據$性別< - 查找(數據$性別,子集(LookupTable中,名稱==「性別」)) (查找是一個包中的函數'epicalc')

它的所有關於'Name =='Gender''bit ...如果變量名和列名中的字符串是相同的,那麼它不是一個大問題循環遍歷所有變量名稱。但是,就我而言,Name列中的字符串名稱通常與變量的名稱不匹配。因此,當查找表是這樣的,我們怎麼辦:

Name  Code Description 
Sex   1  Male 
Sex   2  Female 
VariableX 1  whatever 
VariableX 2  whatever 
VariableX 3  whatever 

在Access中,查找表和包含實際數據表之間的聯繫是通過「行來源」行中的「查找'在表格的設計中選項卡。這個行源是在變量的級別指定的,因爲不同的變量將需要不同的查找值(在我的情況下可以在1查找表中找到)。

我想,如果有導入此行源行成R,指定(在上面的例子),性別實際上是所謂的查找表性的方式,我的問題就迎刃而解了。

如果你想知道,行源代碼行(可在數據表中的每個變量指定)是這樣的:

SELECT lookuptable.Code,lookuptable.Description FROM [ lookuptable] WHERE(((lookuptable.Name)=「Sex」));

所以我想知道是否有人會看到我的問題的解決方案。我猜進口從每個表中訪問每個變量的行源線將方便(如果可能),但也許不是(我不知道)...

我希望我自己清楚。我很樂意加入的東西,使事情變得更加清晰......

[R版本2.15。2(2012年10月26日)

平臺:I386-W64-的mingw32/I386(32位)

epicalc_2.15.1.0

RODBC_1.3-6

回答

0

如果我正確理解你的問題,你面臨的主要困難是你有查找表,包括多個變量的編碼,有時你必須「調整」變量名稱,以便它們匹配。解決這兩個問題的一種方法是在Access中創建保存的查詢,這些查詢可以充當每個變量的單獨「查找(僞)表」。

例如,你可以在Access中創建一個保存查詢名爲 「GenderLookup」,其SQL代碼是

SELECT [Code], [Description] AS Gender 
FROM [MasterLookupTableName] 
WHERE [Name]="Gender" 

......或者......

SELECT [Code], [Description] AS Gender 
FROM [MasterLookupTableName] 
WHERE [Name]="Sex" 

...(視其上面的例子實際上是的情況下),然後使用該查詢作爲在JOIN,例如一個「查找表」,

SELECT [DataTable].[ID], [GenderLookup].[Gender] 
FROM [DataTable] INNER JOIN [GenderLookup] 
    ON [DataTable].[Gender] = [GenderLookup].[Code] 

... whic h會返回....

ID Gender 
1 Male 
2 Male 
3 Female 
4 Male 
+0

啊哈,這聽起來可能,但如果我有40個表,每個有30個變量,我必須運行它?問題是,我真的不想在每個表中查找每個變量的lookupname(在這種情況下,性別爲變量Gender)... – Luc 2013-04-04 23:15:54

+0

@Luc那麼,這當然是一個不可置疑的位置,但真的,是什麼是替代品嗎?與IT方面的進步一樣顯着,我們仍然必須告訴計算機'確切地說。什麼。至。 Do.'。如果你收到的數據集混亂了,那麼你有兩種選擇:(1)讓他們修復它,或者(2)解決它 - 使用Stack Overflow中從朋友那裏得到的最好建議 - 加班,如果可以的話。 ;) – 2013-04-04 23:41:07