利用SAS创建输出的数据格式主要分为下列三种形式:
1)以“,”分隔的CSV或txt文本格式,
2)带格式的形式如HTML、RTF、或XML
3)其他软件需要的格式
SAS创建常用的电脑文件如Microsoft excel、Microsoft Access、dBase、Paradox、SPSS、Stata和JMP,除JMP格式外其余格式则必须安装这些文件的SAS/ACCESS接口来实现输出;JMP文件格式在base sas可实现输出;如果没有安装SAS/ACESS的文件接口,也可以使用DDE(dynamic data exchange)在SAS中实现文件输出。
1) proc export
适用于windows或者unix操作系统,与EXPORT WIZARD等同,EXPORT WIZARD是用户图形交互界面可点击导出SAS数据集;基本格式如下:
proc export data=data-set outfile="filename" dbms=;
在filename的文件名后缀须与dbms设置的文件格式相匹配,如果不匹配以DBMS=指定文件格式对应的分隔符为准,下面是DBMS=和文件名后缀示例:
文件格式 文件名后缀 DBMS
逗号分隔文件 .csv CSV
TAB键分隔文件 .txt TAB
空格分隔文件 DLM
用户还可以自定义分隔符,如果用户自定义分隔符,则不论用上述哪种文件名后缀或者哪种DBMS都可以实现,实现的文件分隔符以自定义的格式为准;
如:proc export data=hotels outfile="c:\myrawdata\hotels.txt"
dbms=DLM REPLACE;
delimiter="&";
run;
导出的文件将保留SAS数据集中定义格式。
使用proc export 输出Microsoft excel 文件,基本格式如下:
proc export data=data-set file="filename"
dbms=identifier replace;
sheet="sheet_name" ;
run;
dbms的取值有EXCEL,XLS,XLSX;
sheet="sheet-name"表示对导出数据集的sheet自定义名称,而非默认的数据集名称;
所以我们通过提前给sheet命名,在多个proc export中使用同一个文件名,实现在一个excel文件内导出多个数据集至多个sheet。
replace 表示对于有相同文件名或者sheet名的内容会实现新的导出会覆盖旧的导出。
但是与PROC EXPORT导出至分隔符文件内不同的是,数据集导出至excel的不保留sas设置的数据格式,即format语句对于proc export 无用。
2.DATA STEP 输出文件
我们使用data step的infile 和input 语句来读入外部文件变成SAS数据集,我们也可以使用file和put语句 来导出sas数据集至外部文件,来实现比proc export在数据内容和格式更多控制,基本过程如下:
put 语句同input语句一样可以有list(输出变量名: input name $ age )、column(第几列-第几列输出: input name $ 1-10 age 11-13 )、formattted(输出格式:input name $10 age 3.) 三种形式;如果使用list的形式,sa会默认变量名之间的分隔符为1个空格;如果在此种格式下需要更换分隔字符 ,需要在file 语句中连用dsd 和DLM="分隔符"。
如果使用column 或者formatted格式输出,用户可以定义输出变量的位置,同input相同使用指针来控制输出的位置:
@n 表示第n列
+n 表示在现有的位置上+n列
/ 表示跳转至下一行
#n 表示跳转至第n行
@ 表示输出完成继续在本行保持
除了输出变量名,我们还可以在变量名之间插入用引号引用的字符。
值得注意的是引用的字符与前一个变量以分隔符相分隔,与后面的变量默认不分隔。该方法导出的数据集文件不含有变量名。
以下是使用input 和infile 以及put和file导入和导出数据集的示例,格式如下:
libname travel "c:\mysaslib";
data travel.golf;
infile "c:\myrawdata\golf.dat";
input Coursename $18. NumberofHoles par Yardage GreenFees;
run;
data _null_;
set travel.golf;
file "c:\MyRawData\Newfile.dat";
put CourseName "Golf Course" @32 GreenFees Dollar7.2 @40 "Par " Par;
run;
@32表示从第32列开始输出下个变量
结果如下:
3.使用ODS导出数据集文件
使用ODS导出数据集时使用ODS确定需要输出的目的文件,CSV或HTML,然后使用proc print 来打印需要导出的数据集实现数据集导出,在proc print 中可以使用missing 来实现数值缺失打印空缺而非点值".";使用NOOBS来实现不打印OBS列。
a)数据导出至CSV文件基本格式:
ods csv file="filename" ;
proc print;
run;
ods csv close;
ods csv 不输出title和footnote,字符全部以引号引用,如果需要输出title和footnote则需要使用ods csvall命令。
b)数据导出至html文件基本格式
ods html file="filename "或者body="filename" style=;
proc print;
run;
ods html close;
如果不设置style= 的话则使用默认的样式,如果不需要样式则可以使用ODS CHTML。