自动撰写统计分析报告:数据引用
By:欧江EXCEL中,如果需要在工作薄sheet2中B1单元格中使用工作簿sheet1中单元格A1中的内容,那么我们有2种方式,一是写一个公式,如在B1单元格中键入“=Sheet1!A1”,二是先在B1单元格中键入“=”,然后点击A1单元格;无论是那种方法,最后在B1单元格中都会形成一个公式“=Sheet1!A1”。这里的“Sheet1”是指工作薄,“A”是指A列,“1”是指第一行。可以发现EXCEL中数据引用采用了“表+列+行”的模式。
在自动撰写统计分析报告中数据引用主要采用宏的形式,在引用格式上则与EXCEL类似,采用“数据集_变量_行”的形式(中间为下划线)。例如需要对数据集a中变量name中的第10行数据进行引用,那么宏语句为“&a_name_10.”。
例如需要得到“全班学生平均身高为50.1英寸”,需要以下步骤:
一、导入撰写宏工具。
首先,需要将含有撰写宏工具的文件“sasmacr”放到C盘macro文件夹之下;然后,在C盘macro文件夹建立一个逻辑库“myapps”,目的是将撰写宏工具导入到SAS系统中;最后,需要用options语句将撰写工具激活,以便使用。
代码如下:
libname myapps 'C:\macro';
options mstored sasmstore=myapps;
二、计算全班学生平均身高。
这里以SAShelp.class数据集为例,其计算代码如下:
data a;
format height 12.2;
set sashelp.class;
run;
proc means data=a noprint;
var height;
output out=b mean=height;
run;
注意需要规定height的format格式,这里设置为显示2位小数。
三、将数据制作成宏。
直接调用撰写宏工具“K”即可,代码如下:
%k(dataset=b);
四、实现数据引用。
这里用print过程为例实现数据引用,直接将文字和数据组合即可,代码如下:
proc print data=a noobs label;
title "全班学生平均身高为&b_height_1.英寸";
run;
至此就实现了数据引用。
这种数据引用方式具有以下几个方面的优点:
一是格式清楚,EXCEL普及率很高,大家都比较熟悉其数据引用方式,因而SAS中采用类似方法便于大家掌握其格式特点。
二是能够自动更新,上面例子中有19名学生,得到的平均身高为62.34英寸。如果某个学生的数据发生变化,再次运行代码后得到学生平均身高,此时宏“&b_height_1.”中的数据就会跟着发生变化,其他地方需要引用该数据,则其引用格式不变,仍然是“&b_height_1.”。
三是稳健性增强,如果在上面例子中增加1个学生的观测此时就体现出这种方法的优越性。EXCEL中增加了观测,用透视表计算平均值则需要手动更改数据源,用函数计算同样需要重新划定数据范围,不能实现自动更新,而SAS则不然。计算平均身高时,默认就是整个数据集,因而无论增加或者减少观测,不影响其数据计算。
欢迎加入自动撰写统计分析报告QQ群:106450645。或关注:http://blog.sina.com.cn/s/articlelist_3774237250_0_1.html。
代码:
libname myapps 'C:\macro';
options mstored sasmstore=myapps;
data a;
format height 12.2;
set sashelp.class;
run;
proc means data=a noprint;
var height;
output out=b mean=height;
run;
%k(dataset=b);
proc print data=a noobs label;
title "全班学生平均身高为&b_height_1.英寸";
run;
宏工具到https://bbs.pinggu.org/thread-2669159-1-1.html下载。