2017-04-20 30 views
1

我翻轉調查數據,因此可以在Tableau中使用它。這裏是SPSS中的示例數據(請記住,每個變量都具有值&變量標籤)。變量與保留變量/值標籤的變化Tableau設置 - 重新構建Tableau的數據,翻轉數據

ID age rate1 rate2 rate3 mr_1 mr_2 mr_3  ... 
1  35 8  3  2  1  2   
2  40 2  2  3    2  
3  41 6  3  5    2  3 
4  43 3  3  1   

where rate1-3 are 3 rating questions。 Mr_1到mr_3是多重響應檢查所有的應用問題

我使用翻轉數據這(你是什麼種族1 =白2 =西班牙裔美國人,3 =黑色):

VARSTOCASES 
    /MAKE answer FROM age rate1 rate2 rate3 mr_1 mr_2 mr_3 
    /INDEX=Index1(7) 
    /KEEP= All 
    /NULL=KEEP. 

結果看起來像這樣的:

ID Index1 answer 
1 1  35 
1 2  8 
1 3  3 
1 4  2 
1 5  1 
... 
... 
... 

連接這時候的Tableau工作哪個就好。但是,我想要的不僅僅是Index1作爲已翻轉的每個變量的標識符。我想是這樣的(VAR,VarLab,ValueLabel只是字符串變量):

ID Var   VarLab   answer ValueLabel 
1 'age'  'What is your age?'  35   '35'        
1 'rate1' 'Rate food'    8   '8' 
1 'rate2' 'Rate wait time'   3   '3' 
1 'rate3' 'Rate bathroom'   2   '2' 
1 'mr_1'  'Ethnicity'    1   'White' 
1 'mr_2'  'Ethnicity'    2   'Hispanic' 
... 
... 
...  

正如你所看到的,我保留了變量標籤,標籤值和變量名本身每個翻轉變量。這是Tableau需要「高」數據集的理想Tableau設置。另外,我可以使用響應的字符串或數字表示形式。最後,我不再需要編輯Tableau內部的別名。任何想法如何做到這一點?也許這將需要python或宏?任何想法,不勝感激。

謝謝!

+0

如果您使用的Tableau查看調查數據,檢查出的博客http://datarevelations.com幾個好的建議 –

回答

1

您需要使用OMS將字典讀入兩個數據集 - 一個用於變量標籤,另一個用於值標籤。 然後您可以通過變量名稱將重新構造的數據集與變量標籤進行匹配,然後通過變量名稱和值將其與值標籤進行匹配。

運行該工具來獲取兩個數據集 - 之前,你重組,當然是:

DATASET DECLARE varlab. 
OMS /SELECT TABLES /IF COMMANDS=['File Information'] SUBTYPES=['Variable Information'] 
    /DESTINATION FORMAT=SAV OUTFILE='varlab' VIEWER=YES. 
DATASET DECLARE vallab. 
OMS /SELECT TABLES /IF COMMANDS=['File Information'] SUBTYPES=['Variable Values'] 
    /DESTINATION FORMAT=SAV OUTFILE='vallab' VIEWER=YES. 
display dictionary. 
omsend. 

現在重組和匹配的文件 - (重命名正確的變量在兩個新的數據集匹配後)。

+0

彈出確實出現了工作的第二個OMS,它有值標籤作爲字符串變量現在。但是,第一個OMS有3個變量,Command_,Subtype_和Label_,但數據集是空的。我沒有變量標籤的字符串變量。有任何想法嗎?希望這是有道理的。 –

+0

變量標籤位於OMS子類型「變量信息」而非變量標籤的表格中。 – JKP

+0

感謝您的更正@JKP。我已經編輯了上面的代碼,它現在應該適合你NickZiebert。 –

1

這是基於使用OMS的其他答案的解決方案,並且我添加了其他一些內容。 這會翻轉你想要的變量,並轉換你想要字符串的任何其他變量。

dataset close all. 
new file. 

get file 'C:\Users\nicholas\Desktop\testFile.sav'. 

************************************************************************************************ 
TABLEAU SETUP 
********************************************** 

insert file="C:/Users/nicholas/Desktop/Type2syntax.sps". 

!toString vars = visitorType. 

!flipAndMatch vars = rate1 rate2 rate3 mr_1 mr_2 mr_3. 

exe. 

*CATEGORIZE FLIPPED VARS 

String filter (a150). 
!groupingBy 'Rating satis' rate1 rate2 rate3. 
!groupingBy 'MR with' mr_1 mr_2 mr_3. 

save outfile 'C:\Users\nicholas\Desktop\OtherTableauTest2.sav'. 

「C:/Users/nicholas/Desktop/Type2syntax.sps」 是:

* Encoding: UTF-8. 

save outfile 'C:\Users\nicholas\Desktop\tempSav.sav'. 

DATASET DECLARE varlab. 
OMS /SELECT TABLES /IF COMMANDS=['File Information'] SUBTYPES=['Variable Information'] 
    /DESTINATION FORMAT=SAV OUTFILE='varlab' VIEWER=YES. 

DATASET DECLARE vallab. 
OMS /SELECT TABLES /IF COMMANDS=['File Information'] SUBTYPES=['Variable Values'] 
    /DESTINATION FORMAT=SAV OUTFILE='vallab' VIEWER=YES. 
display dictionary. 
omsend. 

DATASET ACTIVATE varlab. 
rename variables var1= varName/label = Question. 
alter type varName (a20). 
alter type Question (a1000). 
sort cases by varName. 
SAVE OUTFILE='C:\Users\nicholas\Desktop\varlabsTemp.sav' 
/keep varName Question. 

DATASET ACTIVATE vallab. 
rename variables var1=varName/var2 = AnswerNumb/Label = AnswerText. 
alter type varName (a20). 
alter type AnswerText (a120). 
sort cases by varName AnswerNumb. 
SAVE OUTFILE='C:\Users\nicholas\Desktop\vallabsTemp.sav' 
/keep varName AnswerNumb AnswerText. 

dataset close all. 
new file. 

get file 'C:\Users\nicholas\Desktop\tempSav.sav'. 
compute UNIQUE_ID = $casenum. 


DEFINE !toString (vars=!CMDEND) 
!DO !var !IN (!vars) 
!LET !varDelete=!CONCAT("Delete", !var) 
rename variables !var = !varDelete. 
String !var (a120). 
compute !var = valuelabels(!varDelete). 
exe. 
delete variables !varDelete. 
!DOEND 
!ENDDEFINE. 

DEFINE !groupingBy (!POSITIONAL !TOKENS(1) 
       /!POSITIONAL !CMDEND) 
!DO !var !IN (!2) 
!LET !varString=!CONCAT("'", !var,"'") 
if varName eq !varString filter eq !1. 
!DOEND 
exe. 
!ENDDEFINE. 

DEFINE !flipAndMatch (vars=!CMDEND) 
VARSTOCASES 
/MAKE AnswerNumb FROM !vars 
/INDEX=VarName (AnswerNumb) 
/KEEP=ALL 
/NULL=KEEP. 
EXECUTE. 

sort cases by varName AnswerNumb. 
alter type varName (a20). 

match files files* 
/table='C:\Users\nicholas\Desktop\vallabsTemp.sav' 
/by varName AnswerNumb. 

match files files* 
/table='C:\Users\nicholas\Desktop\varlabsTemp.sav' 
/by varName. 

if AnswerText eq '' AnswerText = string(AnswerNumb, f). 
!ENDDEFINE. 

輸出看起來是這樣的。我沒有翻轉年齡或訪客類型,但我當然可以。

UNIQUE_ID VarName AnswerNumb AnswerText Question   filter   age  VisitorType 
1    'rate1'  8   '8'  'Rate food'  'Rating group'  35 'Overnight Visitor' 
1    'rate2'  3   '3'  'Rate wait time''Rating group'  35 'Overnight Visitor' 
1    'rate3'  2   '2'  'Rate bathroom' 'Rating group'  35 'Overnight Visitor' 
1    'mr_1'   1   'White' 'Ethnicity'  'MR group'   35 'Overnight Visitor' 
...