在SAS中将宽数据集更改为长数据集

时间:2017-08-17 15:59:14

标签: 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

我感谢您对我提出的任何建议。

2 个答案:

答案 0 :(得分:1)

proc SQL中的

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来做这种操作。

编辑:

的内容
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;

答案 1 :(得分: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;