导图社区 ODS 与proc reprot
SAS 编程中ODS与 proc reprot等语句,结合产生报表文件,希望这份脑图会对你有所帮助。
编辑于2023-10-02 17:32:19 湖北省中心主题
ODS
基本语法
ods 输出格式 输出文件proc ...ods 输出格式 close
例子
ods rtf file="U:\Output\print.rtf" style=htmlblue;proc print data=sashelp.cars;run;
style= 指定输出样式
例子
ods rtf file="U:\Output\print.rtf" style=htmlblue;proc print data=sashelp.cars;run;
注意
指定文件名要包含完整路径,名称和扩展名
ODS语句只包含所需输出结果的proc,结束后用ods close终止
OPTIONS参数的常用子选项
SHEET_INTERVAL='BYGROUP' | 'PAGE' | 'PROC' | 'NONE' | 'NOW' | 'TABLE'
specifies the criteria for when a new worksheet is created
子主题
SHEET_LABEL='text-string' | 'NONE'
OPTIONS参数的常用子选项
2.使用proc report生成数据报表
proc report的基础知识
功能
将数据集的结果输出到结果栏,参数围绕输出结果的样式设计
column或columns
例子
proc report data=sashelp.cars; column make model msrp enginesize horsepower;run;
var,id ,class不通用
by和where可以用
define语句
可以对每一列的参数进行赋值
语法
define 变量名/相关参数;
用法
用法1:分组
define make/要分组的变量名;
用法2:定义每一列的列名
若不定义,默认使用标签,若不存在则用变量名
define 变量名/ display "要显示的标签“;
用法3:设置每一列参数,如列宽,字号,颜色等
style(header)=”语句设置列头,其内部的fontsize=9将每个表头都设置为9,style(column)语句设置整列,对manager列使用color=red设置其字体为红色,对amount列用backgroundcolor=blue将背景色设置为蓝色。
子主题
一般与ODS连用
define语句调整每一列的参数
display
定义每一列的变量名
style(位置名)=[参数]
设置每一列的参数,包括列宽,字号,颜色,字体,加粗,背景色等等
just=
对齐方式
4钟对齐方式,见表7-4
p271,待补
cellwidth
设置宽度
绝对值
inch(英寸)或cm
cellwidth=0.5inch
相对值
cellwidth=20%
style(report)=
style(header)=
Oder=参数
对整体设计样式
style与proc report在同一句中
表头,脚注与分行
title
添加表头
不超过10条
footnote
添加脚注
compute
指定行的位置添加新的行
line 将新添加的行,设定为空值
before/after+分组变量名称
例子3
ods rtf file="U:\Output\sales9.rtf";proc report data=sales; column manager name n amount; define manager/oder oder=data "Manager Name" style(column)=[ just=c cellwidth=25%]; define n/display "Sale Amount" style(column)=[just=c cellwidth=20%]; define amount/display "Total Sale Amount" style(column)=[just=c cellwidth=15%]; compute after manager; line @1 ""; endcomp;run;ods rtf close;
可以用赋值语句、IF-THEN/ELSE语句、DO循环语句
语法
DEFINE new-variable-name / COMPUTED; COMPUTE new-variable-name / options; programing statements ENDCOMP;
计算数值变量
DEFINE Income / COMPUTED; COMPUTE Income; Income = Salary.SUM + Bonus.SUM; ENDCOMP;
计算字符变量
DEFINE JobType / COMPUTED; COMPUTE JobType / CHAR LENGTH = 10; IF Title = 'Programmer' THEN JobType = 'Technical'; ELSE JobType = 'Other'; ENDCOMP;
proc report 重要选项一览
默认表格居中,可用 nocenter 左居中
ls= 设置一行的最大字数,64-256
ps= 设置页面的列数 15-32767之间
只对ods输出为listing格式有效
headline 给listing所有列名加下划线
headskip 在列名与数据之间加上额外的一行
split 换行符
子主题
其他
分组
“GROUP”用法选项生成行维度的数据汇总,
ACROSS”用法选项生成列维度的数据汇总
直接在DEFINE语句中指定GROUP用法选项即可
交叉变量
交叉变量与数值变量之间增加一个逗号
汇总分割
BREAK语句会为指定变量的每个唯一值添加分割
语法
BREAK location variable / options; RBREAK location / options;
:BEFORE和AFTER,取决于你希望分割出现在报表特定部分之前还是之后
PAGE 开始新的一页 SUMMARIZE 为数值变量插入汇总统计量
添加统计量
添加计算变量
3.其他方法:
6.美化统计图表
1.输出结果与模板
proc template
proc template; define style 模板名称; style 定义内容/参数1= 参数2= ...; end;quit;
例子
proc template; define style Custom; STYLEN SystemTitle / FONT FACE="Arial,Helvetica,sans-serif" FONT SIZE8=8 FONT WEIGHT=bold; end;run;
2.模板的设计与封装
报表输出相关
输出
ODS
生成excel表格
ods excel
生成xlsx属性的excel文件
ods excel;ods excel file="path\file name" style=Style_Attributes options(Arguments1=value1 Arguments2=value2 …);proc print data=dataname noobs; run; *此处还可使用其他的proc步输出;ods excel close;
ods tagsets
生成xml或者xls属性的excel文件
xls 是二进制的复合文档类型的结构;.xlsx 是用新的基于XML的压缩文件格式,使其占用空间更小,运算速度也会快一点
OPTIONS参数的常用子选项
CONTENTS
sheet_name
SHEET_INTERVAL='BYGROUP' | 'PAGE' | 'PROC' | 'NONE' | 'NOW' | 'TABLE'
什么时候更换excel的sheet
start_at
frozen_headers冻结列
frozen_rowheaders冻结行
embedded_titles="yes":加入标题
autofilter='all':设置筛选下拉菜单。就是excel里一般第一行的那个下拉小箭头。一
range:输入范围。例如‘3-5’,或者‘A:D’这样
title_footnote_width="10":这个选项可以把标题脚注放到合并单元格里。设置数字10,就可以把横向10个单元格(包含标题或脚注)合并成一个。
报表设计
proc report
基础知识
功能
将数据集的结果输出到结果栏,参数围绕输出结果的样式设计
column或columns
用于指定REPORT过程使用哪些变量,以及这些变量采用何种排序。如果省略COLUMN语句,则SAS会默认使用数据集中的所有变量
proc report data=sashelp.cars; column make model msrp enginesize horsepower;run;
var,id ,class不通用
by和where可以用
define语句
可以对每一列的参数进行赋值
语法
define 变量名/相关参数;
用法
用法1:分组
define make/要分组的变量名;
用法2:定义每一列的列名
若不定义,默认使用标签,若不存在则用变量名
define 变量名/ display "要显示的标签“;
还可以定义format
用法3:设置每一列参数,如列宽,字号,颜色等
style(header)=”语句设置列头,其内部的fontsize=9将每个表头都设置为9,style(column)语句设置整列,对manager列使用color=red设置其字体为红色,对amount列用backgroundcolor=blue将背景色设置为蓝色。
Define Name/ display format=$8. width=8 spacing=2 noprint left "Name";
compute
指定行的位置添加新的行
line 将新添加的行,设定为空值
before/after+分组变量名称
例子3
ods rtf file="U:\Output\sales9.rtf";proc report data=sales; column manager name n amount; define manager/oder oder=data "Manager Name" style(column)=[ just=c cellwidth=25%]; define n/display "Sale Amount" style(column)=[just=c cellwidth=20%]; define amount/display "Total Sale Amount" style(column)=[just=c cellwidth=15%]; compute after manager; line @1 ""; endcomp;run;ods rtf close;
可以用赋值语句、IF-THEN/ELSE语句、DO循环语句
语法
DEFINE new-variable-name / COMPUTED; COMPUTE new-variable-name / options; programing statements ENDCOMP;
计算数值变量
DEFINE Income / COMPUTED; COMPUTE Income; Income = Salary.SUM + Bonus.SUM; ENDCOMP;
计算字符变量
DEFINE JobType / COMPUTED; COMPUTE JobType / CHAR LENGTH = 10; IF Title = 'Programmer' THEN JobType = 'Technical'; ELSE JobType = 'Other'; ENDCOMP;
proc report 重要选项一览
默认表格居中,可用 nocenter 左居中
ls= 设置一行的最大字数,64-256
ps= 设置页面的列数 15-32767之间
只对ods输出为listing格式有效
headline 给listing所有列名加下划线
headskip 在列名与数据之间加上额外的一行
split 换行符
子主题
其他
分组
“GROUP”用法选项生成行维度的数据汇总,
ACROSS”用法选项生成列维度的数据汇总
直接在DEFINE语句中指定GROUP用法选项即可
交叉变量
交叉变量与数值变量之间增加一个逗号
汇总分割
BREAK语句会为指定变量的每个唯一值添加分割
语法
BREAK location variable / options; RBREAK location / options;
:BEFORE和AFTER,取决于你希望分割出现在报表特定部分之前还是之后
PAGE 开始新的一页 SUMMARIZE 为数值变量插入汇总统计量
添加统计量
添加计算变量
proc tabulate
功能与proc report差不多,但自由度更低一点,了解第一个即可
模板和封装
proc template;
proc template; define style 模板名称; style 定义内容/参数1= 参数2= ...; end;quit;
子主题
其他:
注意
有的定义Head标题样式与ODS内置模板冲突,
下放到define 列
format和length
用report+ods输出遇到的问题
空数据集输出
输出0丢失(不显示)
数值型 format z5.
https://documentation.sas.com/doc/en/vdmmlcdc/8.1/leforinforref/p09lpr3kmbh8fen1qepuv6zc1ldd.htm
字符型 format $XX
材料链接
ODS EXCEL Statement
https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/odsug/p09n5pw9ol0897n1qe04zeur27rv.htm
子主题
option选项
https://www.jianshu.com/p/42a22a6a134c
关于Z.format
https://documentation.sas.com/doc/en/vdmmlcdc/8.1/leforinforref/p09lpr3kmbh8fen1qepuv6zc1ldd.htm
查看颜色
https://documentation.sas.com/doc/en/pgmsascdc/9.4_3.5/graphref/n161ukdyz9wpfsn1nh8sihforvyq.htm
小tips
关于format length
建议在写data的时候,都定义一下length 和format
导出excel文件
SAS输出到excel不同写法区别
proc export
子主题
proc report+ods
建议采用这个来输出,避免打不开
避免输出excel文件打不开
通常是length和format不一致, 也有可能是sheetname长度
xlsx后缀的,sheetname支持更长的长度
方法1 定义每一个变量的length 和format
获取每个变量最佳长度的宏--黄娜
方法2 采用proc report+ods输出
方法3 用proc export时,修改dbms后缀为 excel,但是文件名依旧是xlsx
用不了VBA合成
不会生成bar备份文件
有一定概率程序报错
重复lable
待验证(来源-黄娜)
导入excel文件tips
1.使用全局语句
options validvarname=upcase;options DEV=EMF;
2.proc import
proc import + DBMS=EXCEL + mixed=yes
mixed的话,上面的DBMS必须是EXCEL,而不是xlsx了,而且不能再写成range="sheet1$A1:
proc import out=&outdata datafile="XXX.xlsx dbms=xlsx replace; range="&sheetname$A2:0";run;
用dbms=excel和dbms=xlsx,不用getname=yes的话,dbms=excel输出的列名是F1,F2,F3......而dbms=xlsx输出的是VAR1,VAR2,VAR3
关于SAS数据集中显示乱码
长度和format
attrib 在set进来就定义 长度和format,informat
编码是否为UTF-8
SCII,适用于编码英文,也就是SAS英文版的编码方式;euc-cn,即GB2312,编码简体中文,即SAS中文版的编码方式;UTF-8,是unicode的一种实现方式,会根据字符情况而变化字节长短,适用于很多语言的编码,中文英文德语韩文等等。