SAS(3)


SAS变量的输出格式

指定输入格式会改变变量的值,指定输出格式不会改变变量的值,只是改变显示的样子。
输出格式通过在DATA步中增加FORMAT语句来定义,一般规定FORMAT语句写在INPUT和CARDS之间,基本形式如下:
FORMAT 变量1 格式1 变量2 格式2…;

数值型变量的输出格式

主要有三种:
w.d:含义和输入格式一致
commamw.d:将数值整数部分自右向左每三位用逗号隔开。
percentw.d:将数据显示为百分号的形式,它会自动将变量乘以100并加上%。
例1:

/* 数值型变量的输出格式 */
DATA Day03.DEMO1;
	INPUT num1 num2 num3;
	FORMAT num1 5.2 num2 comma12.1 num3 percent8.2;
	CARDS;
50 10205600 0.1234
45 9780000 0.0361
;
RUN;
PROC PRINT;
RUN;

结果:1.png-3.4kB

例2:

/* 输入输出格式对值的处理 */
DATA Day03.demo2_2;
	INPUT x $ y$2.;
	FORMAT x $2.;
	x1 = x + 1;
	y1 = y + 1;
	CARDS;
1100 1100
;
RUN;

PROC PRINT;
RUN;

/* x  y  x1   y1 */
/* 11 11 1101 12 */
/* 第一步:input  */
/* x = '1100' y = '11' */
/* 第二步:format */
/* 输出的x = '11' */
/* 第三步计算 */
/* SAS在计算的时候会做一个隐式的转换会把字符串转换成数字 */
/* x1 = x + 1 = 1100 + 1 = 1101 */
/* y1 = y + 1 = 11 + 1 = 12 */

结果:1-1.png-1.7kB

字符型变量的输出格式

字符型变量的输出格式与输入格式一致,输出没有8个字节的限制,实际中很少设置字符型变量的输出格式。

日期型变量的输出格式

日期型变量的输出格式与输入格式基本一致,输出格式可以在宽度前加一个字母,以区分各种显示形式。
| 字母|输出格式|显示示例 |
| -------- | -----: |
|s |yymmdds8.| 18/12/27 |
|d | yymmddd8.| 18-12-27 |
|p |yymmddp8. | 18.12.27 |
|c |yymmddc8. | 18:12:27 |
|b |yymmddb8. | 18 12 27 |
|n |yymmddn8. | 181227 |

例:

/* 时间变量输出格式 */
DATA Day03.demo2;
	INPUT date1 :yymmdd10. date2 :yymmdd10. date3 :yymmdd10.;
	FORMAT date1 yymmdd10. date2 yymmdds8. date3 yymmddp8.;
	CARDS;
18.12.27 181227 20181227
;
RUN;
PROC PRINT;
RUN;

结果:2.png-2.4kB

自定义输入输出格式

SAS中通过PROC FORMAT来实现自定义格式,例如输入0或1,自动换行为男或女,考试分数输出等第制。
基本形式:
PROC FORMAT;
INVALUE<美元符号> 格式名 变量值或取值范围1=输入格式1 变量值或取值范围2=输入格式2…;
VALUE<美元符号> 格式名 变量值或取值范围1=输出格式1 变量值或取值范围2=输出格式2…;
PICTURE 模板名<数值范围>

  • INVALUE语句定义输入格式,如果输入格式是字符,则需要加上$.

  • VALUE语句定义输出格式,如果输出的是字符,则需加上$.

  • PICTURE语句定义数值的显示模板,类似Excel中的自定义单元格格式。

例:

/* 自定义输入输出格式 */
PROC FORMAT;
INVALUE $ geft 1="男" 2="女";
VALUE scft low-<60="不及格" 60-<80="及格" 80-high="优秀";
PICTURE peft low-high="00.00%";
PICTURE pft low-high="99.00%";
RUN;
DATA Day03.demo3;
	INPUT name :$ ge:$geft. sc pe p;
	FORMAT sc scft. pe peft. p pft.;
CARDS;
Jack 1 58 18.6 12.32
Rose 2 95 21.1 0.21
Tony 1 75 67.2 11.0
;
RUN;
PROC PRINT;
RUN;

结果:3.png-5.8kB

SAS中的决策结构

指定程序评估或测试一个或多个条件,以及如果条件被确定为真则执行一个或多个语句,相反如果条件为假则不执行。

SAS(3)_第1张图片

1、分支语句基本格式:
IF 表达式 THEN 新变量=;
ELSE 新变量=;
例1:

/* 分支语句if */
DATA Day03.demo4;
	INPUT sc;
	FORMAT scf $9.;
/* 上面这行解决显示不及格 */
	IF sc>60 THEN scf="及格";
	ELSE scf="不及格";
CARDS;
90
50
86
56
;
RUN;
PROC PRINT;
RUN;

结果:SAS(3)_第2张图片

例2:

/* 使用分支结构 */
DATA Day03.if1;
	INPUT sc;
	FORMAT scf $9.;
/* 	IF sc >= 60 THEN scf = '及格'; */
/* 	ELSE scf = '不及格'; */
	IF sc < 60 THEN scf = '不及格';
	ELSE IF sc < 70 THEN scf = '及格';
	ELSE IF sc < 80 THEN scf = '中等';
	ELSE IF sc < 90 THEN scf = '良好';
	ELSE scf = '优秀';
	CARDS;
60
55
78
89
90
100
;
RUN;

PROC PRINT;
RUN;

结果:SAS(3)_第3张图片

SAS中循环的使用

语句基本格式:
DO 变量=初始值TO 最终值< 增加值>;
SAS语句;
END;
例:

/* 循环语句 */
DATA Day03.demo5;
/* DO COUNT=1 TO 5; */
/* COUNT + 1; */
RETAIN COUNT 0;/*RETAIN的含义是使变量可以保持最新的值*/
/* COUNT + 1; *count+1称为自操作运算,包含了赋初值,算术运算,以及保持变量最新值的功能;
INPUT sc;
scf = sc * 10;
COUNT = COUNT + 1;
/* OUTPUT;/*代码执行到这将变量输出*/ */
/* END;/*循环最后的END 关键字不要忘记 */
CARDS;
60
54
59
64
89
78
90
67
69
80
;
RUN;
PROC PRINT;
RUN;

结果:SAS(3)_第4张图片

其他例1:
求1+2+3+…+10=?

/* 求1+2+3+...+10= */
DATA Day03.demo6;
	ETAIN sum 0;*RETAIN的含义是使得变量可以保持最新的值;
	INPUT num;
	sum = sum +num;
CARDS;
1
2
3
4
5
6
7
8
9
10
;
RUN;
PROC PRINT;
RUN;

结果:SAS(3)_第5张图片

其他例2:
求1+2+3+…+100=?

/* 求1+2+3+...+100 */
DATA Day03.demo7;
	sum = 0;
	DO i = 1 TO 100;
		sum = sum + i;
		OUTPUT;
	END;
RUN;
PROC PRINT;
RUN;

其他例3:
百元鸡问题

/* 百元鸡问题 */
DATA Day03.baiyuanji;
	DO hen = 1 TO 20;
		DO cock = 1 TO 33;
			chicken = 100 - hen - cock;
			IF hen * 5 + cock * 3 + chicken / 3 = 100 THEN OUTPUT;
		END;
	END;
RUN;
PROC PRINT;
RUN;

结果:9.png-2.7kB

你可能感兴趣的:(学习)