2017-08-17 11 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

あなたのアドバイスはありがとうございます。 PROC SQLで

+0

まず、あなたが実際のデータを投稿する必要がありますそれをsasプログラムに組み込みます。つまり、あなたがしたいことは、proc transposeを使って簡単に行うことができます。あなたのデータを投稿して、私は実行可能なソリューションを提供します – DCR

答えて

0

のラインで何か私は次のコードを使用して可能なメイクPROC転置仕事だった:誰かがコピー&ペーストできるよう

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; 
    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を持っています。

EDIT:

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

関連する問題