2017-08-17 318 views
0

我已經查看了一些其他類似問題(這裏,這裏和這裏),但還沒有成功獲得我接受的答案。我試圖將寬數據集轉換爲長數據集,將列名轉換爲具有與舊列名相鄰的匹配記錄的行。我似乎無法使用我當前的代碼顯示原始列名。將寬數據集更改爲SAS中的長數據集

我有一個廣泛的數據集,看起來像這樣:

enter image description here

我需要它看起來像這樣: enter image description here

我試着用數組來做到這一點:

data want; 
set have; 
array d ImprovementPlan -- AssessmentPlan; 
do i = 1 to dim(d); 
    Section = d{i}; 
     Text = d 
    output; 
    end; 
keep DBN Emp_ID FiscalYear Section Text Meeting1 Meeting2 Meeting3 Meeting4 Meeting5; 
run; 

但是結果如下: enter image description here

我很欣賞你對我的任何建議。

+0

首先,你應該張貼您的實際數據,以便有人能複製和粘貼它變成了一個sas程序。也就是說,你想要做的事情可以很容易地使用proc轉置完成。發佈您的數據,我會提供一個可行的解決方案 – DCR

回答

0

行我是用下面的代碼能夠化妝PROC TRANSPOSE工作:

PROC TRANSPOSE DATA=WORK.t_yoy 
    OUT=flash.TTRANSPOSED_yoy(LABEL="Transposed WORK.T2017") 
    PREFIX=Text 
    NAME=Section 
    LABEL=Label 
; 
BY Emp_ID FiscalYear DBN; 
    VAR ImprovementPlan ActionPlan TimeLinePlan SupportPlan AssessmentPlan; 
    COPY DBN Emp_ID FiscalYear Meeting1 Meeting2 Meeting3 Meeting4 Meeting5; 

RUN; QUIT; 
1

union在PROC SQL應該做的伎倆

proc sql; 
    create table want as 
    select DBN, Emp_ID, FiscalYear, 'Action_Plan' as Section, Action_Plan as Text, Meeting1, Meeting2, Meeting3, Meeting4, Meeting5 
    from have 
    union 
    select DBN, Emp_ID, FiscalYear, 'Timeline' as Section, Timeline as Text, Meeting1, Meeting2, Meeting3, Meeting4, Meeting5 
    from have 
    union 
    select DBN, Emp_ID, FiscalYear, 'Support_Plan' as Section, Support_Plan as Text, Meeting1, Meeting2, Meeting3, Meeting4, Meeting5 
    from have 
    union 
    select DBN, Emp_ID, FiscalYear, 'Assessment_Plan' as Section, Assessment_Plan as Text, Meeting1, Meeting2, Meeting3, Meeting4, Meeting5 
    from have 
    ; 
quit; 

SAS也有proc transpose做樣的操作。

編輯:東西的

proc sort data=have; 
    by DBN Emp_ID FiscalYear Meeting1 Meeting2 Meeting3 Meeting4 Meeting5; 
run;  
proc transpose data=have out=want(rename=(column1=Text)) name=Section prefix=column; 
    by DBN Emp_ID FiscalYear Meeting1 Meeting2 Meeting3 Meeting4 Meeting5; 
    var action_plan timeline support_plan assessment_plan; 
run; 
+0

使用proc轉置代替 – DCR

+0

@DCR我確實在我的答案中建議。然而,我並沒有足夠的瞭解我的頭頂如何爲他的目的而寫。並且缺少示例代碼,我可以將其複製粘貼到SAS並嘗試一下,我沒有時間... – user2877959

+0

所以你做了! – DCR