• SAS|format&proc tabulate


    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    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;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    proc tabulate

    一般格式:

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

    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;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
  • 相关阅读:
    SQL-按每天日期查询数据 没有数据缺失数据返回0 无需建表 若无当日数据也返回值 图表按天查询数据返回
    MySQL中WEEK()函数刨坑
    如何检查 Docker 和 Kubernetes 是否可以访问外部网络,特别是用于拉取镜像的仓库?
    Kotlin中循环语句
    Compose预处理组件大比拼:性能、应用场景和可视化对比总结
    单链表经典OJ题:合并有序链表
    用Windows Installer CleanUp Utility 在windows server上面将软件卸载干净,比如SQLSERVER
    【基于能量的模型】
    C++ 类和对象【上篇】(类的定义+类对象模型+this指针)
    Ubuntu16.04 python matplotlib 输出轴标签出现中文乱码
  • 原文地址:https://blog.csdn.net/qq_43776450/article/details/125495888