当前位置: 首页 > 工具软件 > tabulate > 使用案例 >

SAS|format&proc tabulate

狄楷
2023-12-01

format

指定数据输出格式
不会改变变量值,只是按照指定格式显示。
一般格式:

format 变量1 格式1 变量2 格式2……;

字符型变量的输出格式:$w.(与输入格式一样);
数值型变量的输出格式:w.d、commaw.d(将数值的整数部分自右向左每三位用逗号隔开,其中w包括逗号和小数点)、percentw.d(将数据显示百分比的格式,自动将变量乘以100,并加上%。其中w包括%,%为3个字节)。

/*控制字符型变量的输出格式,复制sashelp逻辑库下的class数据集,使姓名变量只展示前三个英文字母*/
data a;
	set sashelp.class;
	format name $3.;
run;
/*控制数值型变量的输出格式,复制sashelp逻辑库下的class数据集,使体重展示为有两位小数的格式*/
data b;
	set sashelp.class;
	format weight 6.2;
run;
/*数值型输出格式展示*/
proc import datafile='D:\test\num.xlsx' out=num dbms=xlsx replace;
	sheet='sheet1';
run;

/*commaw.d:数值的整数部分自右向左每三位用逗号隔开;w包括逗号和小数点
 percentw.d:自动将变量乘以100,并加上%;包括%,%为3个字节*/
data c;
	set num;
	format num 5.2 cost comma16.1 per percent7.1;
run;

/*日期型输出格式展示*/
proc import datafile='D:\test\num.xlsx' out=day dbms=xlsx replace;
	sheet='sheet2';
run;
data day2;
	set day;
	format day1 yymmddc10. day2 yymmddd10. day3 yymmddp10.;/*c:冒号;d:-;p:.;s:/;b:空格; n:无*/
run;

data day3;
	set day;
	format day1 yymmdds10. day2 yymmddb10. day3 yymmddn8.;/*c:冒号;d:-;p:.;s:/;b:空格; n:无*/
run;

proc format

自定义输出格式
一般格式:

proc format;
value 变量名
(自定义输出格式内容);
run;

$:原变量是字符型就加,数值型不加。

/*数值型*/
proc format;
	value age
	low-<12='不满12'
	12-<15='大于12不满15'
	15-high='大于15';
run;

/*字符型*/
proc format;
	value $sex
	'M'=0
	'F'=1;
run;

proc tabulate

一般格式:

proc tabulate/选项;
	class 分组变量1 分组变量2……;
	var 分析变量1 分析变量2……;
	table 变量布局;
	keylabel 关键词=‘标签’……;
run;

proc tabluate语句的选项
missing:在结果中显示缺失数据,如果不写该选项,默认不显示缺失数据值;
class语句:分组变量会自动计算例数;
分组变量关键词:n(例数)、colpctn(列百分比)、rowpctn(行)、pctn(单元格百分比)
var语句:分析变量会自动计算总和;
分析变量关键词:n、mean、std、min、max、sun、median、q1(第25百分位数)、q3(第75百分位数)、qrange(四分位数间距)
table语句中的变量布局
用逗号(,)连接结果以二维列联表格式显示;
用星号(*)连接结果以交叉的形式显示;
用空格( )连接结果以并列的形式显示;

/*tabulate*/
/*统计关键词没有指定,默认对分类变量输出例数,对连续变量输出总和*/

proc import datafile='D:\test\admit.xlsx' out=admit dbms=xlsx replace;
run;

proc tabulate data=admit missing;
	class sex age;
	/*并列*/
/*	table sex age;*/
	/*交叉*/
/*	table sex*age;*/
	/*二维列联表,(行,列)*/
	table sex,age;

run;

/*分类变量会自动计算例数*/
proc tabulate data=admit missing;/*默认下不考虑缺失数据,missing可改变这种默认*/
	class actlevel;/*分类变量,按table语句指定的布局显示*/
	table actlevel;
run;
/*分析变量自动计算总和*/
proc tabulate data=admit missing;
	var age;/*分析变量,显示指定变量的相应统计指标*/
	table age;
run;


/*两种方式设置变量标签*/
proc tabulate data=admit missing;
			class actlevel;
			var age;
			table actlevel,age*(mean n);
			label actlevel='水平'age='年龄';/*指定变量名的标签*/
			keylabel mean='平均值';/*指定关键词的标签*/
run;


proc tabulate data=admit missing;
			class actlevel;
			var age;
			table actlevel='水平',age='年龄'*(mean='平均值' n);
run;

/*对表格加以修饰*/
proc tabulate data=admit missing;
	class actlevel;
	var age;
	table actlevel="",age*(mean n) /box="水平";
	label age="年龄";
	keylabel mean="平均值" n="例数";
run;

/*加format*/
proc format;
        value $actfmt 'LOW'='(1) Low'
                      'MOD'='(2) Moderate'
                      'HIGH'='(3) High';
run;
proc tabulate data=admit missing;
			class actlevel;
			var age;
			format actlevel $actfmt. ;
			table actlevel,age*(mean*f=4.1 n);/*mean显示为4.1的格式*/
			label actlevel='水平' age='年龄';
			keylabel mean='平均值';
run;

 类似资料: