我已经看了一些其他类似的问题(这里,这里,这里),但是我找到的答案没有取得成功。我试图将宽数据集转换为长数据集,将列名转换为与旧列名相邻的匹配记录的行。我似乎无法使用我当前的代码显示原始列名。
我有一个如下所示的广泛数据集:
我试图用数组做到这一点:
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;
我感谢您对我提出的任何建议。
答案 0 :(得分: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
来做这种操作。
编辑:
的内容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;