一、程序代码
以下是用ods 生成excel的例子,先上代码。
ods excel file="path\cc.xlsx" style=pearl options(sheet_name="sheet名字" sheet_interval='none' embedded_footnotes='yes' embedded_titles="yes" contents="yes");
proc report data=dsn;
column name n;
define name / group;
compute name;
length link $100;
link =cats(name,".rtf");
call define(_col_,'url',link);
endcomp;
run;
ods excel close;
ods生成excel有两个方法,一个是ods excel 还有一个是 ods tagsets.excelxp。后者其实生成的不是真excel,是xml格式,后缀也不能写xlsx,只能是是xls。另外,call define(_col_,'url',link);中的‘url’是可以加超链接的,link不是sas程序或选项,是自定义的变量。
二、option选项
options(。。。。)中有如下选择:
1、sheet_name="sheet名字" ,就是添加excel的sheet的名字。
2、sheet_interval='none',这个选项是决定什么时候更换excel的sheet的,毕竟我们不希望所有的表都写在一个sheet里。这个选项有如下的值可以选:
NONE:他的意思是所有的数据都放在一个sheet里。只要不换sheet名,就不换sheet。
BYGROUP:过程步中一般可以用by选项分组,这个选项可以让每个by选项的分组,作为一个独立的sheet,sheet名字就是by里面变量的值。
PAGE:每一页作为一个独立sheet,sheet名没试过,估计是自定义的。
PROC:每个过程步的结果一个sheet,一般来说过程步除了report一类报告型的,都有名字,没试过,应该是默认名作为sheet名字
NOW:立刻生成一个新的sheet,其实如果是NONE的话声明新的sheet名字也可以换sheet,但这个选项不知道有什么实际作用。
TABLE:每个表格一个sheet,名字应该是用默认的。
以上我觉得真正有意义的可能就是 NONE BYGROUP ,因为“NONE”加“sheet名重定义”就已经可以随意增加sheet了。
3、embedded_footnotes='yes' :加入脚注
4、embedded_titles="yes":加入标题
5、absolute_column_width='16px' :设置绝对列宽。单位可选。
6、absolute_row_height='20':设置绝对列高。单位可选。
7、autofilter='all':设置筛选下拉菜单。就是excel里一般第一行的那个下拉小箭头。一般用来筛选排序用的。除了all还有如下选择:
ALL:全都加筛选。它只有表格从A1单元格开始的时候才有效(start_at=可以修改起始位置)。
NONE:全都不加筛选(默认值)
range:输入范围。例如‘3-5’,或者‘A:D’这样。值得注意的是这里的范围是相对范围,而不是绝对范围。它不是参照整个excel表来定的位置,而是参照具体表格的位置。比如A和D并不是指的excel里的A列和D列,它指的是excel表里的第1列和第4列。一旦用start_at修改其实位置就会发现,如果起始位置在excel的B列,range设置为B:C,那么实际上结果将在excel里的C列和D列生成筛选。用数字表示范围也是类似的。另外,筛选并不是只能在第一行产生,它是在表头所在的那一行生成的。
column:输入具体变量的位置,但只能输入一个。例如:'2'。与range里的情形类似,该数字是相对表格的位置,不是excel里sheet的位置。
8、sheet_label='XXX':设置sheet名的前缀,它指定的值将作为所有的sheet名称的前缀。但是sheet_name选项会使得这个选项无效
9、start_at="B2":设置表格起始位置,默认是第一行的第一个单元格。这个选项能决定表格在sheet中的位置。
10、title_footnote_width="10":这个选项可以把标题脚注放到合并单元格里。设置数字10,就可以把横向10个单元格(包含标题或脚注)合并成一个。
11、title_footnote_nobreak="yes":可以直接将标题,脚注,by行等那种跨行的合并单元格,使得合并的单元格数目正好等于表格变量的数目。这个选项会覆盖title_footnote_width的影响。
12、absolute_column_width='100px' :设置整个sheet的变量宽度。
13、absolute_row_height='20':设置整个sheet的变量高度。
14、embed_titles_once="yes":标题只出现一次。我们可以设置一个sheet里纵向罗列很多表,这个选项可以让这些表的标题只出现一次。
15、embed_footnotes_once="yes":同上
16、frozen_headers='on':冻结首行。默认为列标题所在行。如果输入数字则冻结对应行以上的部分,注意这个数字是绝对位置,不论表格位置在哪里,都会冻结设定的位置。
17、frozen_rowheaders='3':冻结列。默认冻结表格最后一列的左边所有列。也可以输入数字,该数字也是绝对位置。
18、hidden_columns='1, 2, 5, 6, 8-10':隐藏列。还可以用字母表示列,但数字字母不能混用。这里列位置的引用时绝对的,是按excel的sheet的位置,而不是按表位置为参照的。
19、hidden_rows='1,2,5,6,8-10':隐藏行,同上。
20、orientation='landscape':sheet横向或纵向。
21、flow="header,data":去掉因字符过长而自动生成的换行符。