LucyYan_renda 发表于 2016-1-30 21:48 
可是excel导入的话,列名并不是事先安排好的,而是由excel给出的(也就是说我事先并不知道是 Math Englis ...
假设你从Excel导入的dataset为Excel_data, 第一列为Student, 剩下的都是各个course。
*****get course name********;
*first, get all variable name;
proc contents data=excel_data out=var_name (keep=name varnum) noprint;
run;
*drop the first variable name (student). The rest are all course names;
data var_name;
set var_name;
if varnum ne 1;
run;
/*     make a macro variable 'course_list' to store names of courses,by the
       original order in excel file
*/
proc sql;
select name into: course_list separated by ' ' from var_name order by varnum;
quit;
******reshape data**********;
data trans_data;
set excel_data;
array course_name{*} &course_list;
do i=1 to dim(course_name);
course=vname(course_name
);
score=course_name;
output;
end;
drop &course_list i;
run;
******plot data********;
proc sgplot data=trans_data;
vbox score/ category=course;
xaxis discreteorder=data;
run;