全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
17260 7
2016-01-29
悬赏 10 个论坛币 已解决
SAS中,excel导入数据 1.PNG
如何做多个箱线图 Side-by-Side Boxplot(如果是在SAS中直接输入的话就比较简单,但是excel导入的数据不知道该怎么办了,求助。)
下图举例:
捕获.PNG




最佳答案

高贵林 查看完整内容

假设你从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 ...
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-1-29 19:17:03
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;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-30 09:08:25
要先把数据 reshape 再作图。

******read data*********;
data test_data;
input student course1-course5;
datalines;
1        75        86        58        78        81
2        56        84        53        90        60
3        79        63        77        65        79
4        83        63        93        89        98
5        55        80        69        63        76
6        63        51        87        63        99
;
run;

******reshape data**********;
data trans_data;
set test_data;
array course_name{*} course1-course5;
do i=1 to 5;
course=vname(course_name[i]);
score=course_name[i];
output;
end;
drop course1-course5 i;
run;

******plot data********;
proc sgplot data=trans_data;
vbox score/ category=course;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-30 18:29:24
高贵林 发表于 2016-1-30 09:08
要先把数据 reshape 再作图。

******read data*********;
请问,如果原来的列名不是course1,course2...而是math,English...
这样要怎么办?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-30 21:12:32
LucyYan_renda 发表于 2016-1-30 18:29
请问,如果原来的列名不是course1,course2...而是math,English...
这样要怎么办?
******read data*********;
data test_data;
input student Math English Physics Chemistry History;
datalines;
1        75        86        58        78        81
2        56        84        53        90        60
3        79        63        77        65        79
4        83        63        93        89        98
5        55        80        69        63        76
6        63        51        87        63        99
;
run;

******reshape data**********;
data trans_data;
set test_data;
array course_name{*} Math English Physics Chemistry History;
do i=1 to dim(course_name);
course=vname(course_name);
score=course_name;
output;
end;
drop Math English Physics Chemistry History i;
run;

******plot data********;
proc sgplot data=trans_data;
vbox score/ category=course;
xaxis discreteorder=data;
run;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-1-30 21:48:23
高贵林 发表于 2016-1-30 21:12
******read data*********;
data test_data;
input student Math English Physics Chemistry History;
...
可是excel导入的话,列名并不是事先安排好的,而是由excel给出的(也就是说我事先并不知道是 Math English 还是 Chemistry History Math ),那么编码就不能这样写了吧(不管excel中是什么样的课程,通用的程序)
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

分享

扫码加好友,拉您进群