输入/输出格式
? 什么是格式(Format)?
Format is an instruction the SAS System uses to display or write each value of a variable. 即:读入不同格式的数据,并按不同要求显示数据。
? 常见数据的数据格式: 字符型 数值型 日期时间型
用户自定义型( 用FORMAT过程定义)
? 注:除自定义类型外,其他类型的数据SAS系统均已定义好了相应的格式,只需要
调用即可
? 输入格式和输出格式的使用:输入格式通常在input语句中使用,输出格式通常在
format语句中使用。 1、字符型输入/输出格式
? 1、输入格式:$w. 和 $CHARw. 共同特点:缺省值均为变量的长度 不同点:
$w. :必须指定w的值,不保留字符串前的空格 $CHARw.:w的缺省值为8,保留字符串前的空格
2、输出格式:$w. 和 $CHARw. 共同特点:保留字符串前的空格 注:一个汉字占两个字节
例如:下面是一些人名,请将其读入到一个变量NAME中,注意:姓和名之间有一个空格,建立的SAS数据集如右边的形式。
data a;
input name $ char14.; cards; Bill Clinton George Bush Tony Blair Saddam Hussein Vladimir Putin ;
proc print; run;
2、数值型输入/输出格式
1、输入格式:w.d
w.d:读入宽度为w的原始数据,并存为SAS数值,也能自动读入以浮点方式表示的原始数据。
遵循以下原则:
2、输出格式: Bestw.d, w.d 和 Ew.
Bestw.d:系统默认格式(相当于后两种格式的自动识别)。w缺省值为12,最大值可达32 w.d:将数值用不超过d位小数及总宽度不超过w位的定点数表示 Ew. :用宽度不超过w的浮点数表示
注:宽度设置不合适时,自动调用SAS系统同宽度的Best格式表示。
? 特殊的输入格式
COMMAw.d :专为读入金额的数据而设置。读入宽度为w的字符串,并能自动去除逗号,空格,美圆符号和短横线,保留数字和小数点,还可将用括号括起来的数据记为负数。读入后按格式w.d记入数值。
DOLLARw.d 为其别名。
? 特殊的输出格式: COMMAw.d 和DOLLARw.d
COMMAw.d :将数值以包含小数位数不超过d位的定点数表示,并在整数部分自右往左每三位用逗号分隔,总字符数不超过w。COMMA6.为其缺省设置。 DOLLARw.d 在COMMA表示的数据左侧加上美圆符号。
data a;
input x comma7. y comma7.; cards;
12,002 34,231 2,210 21,311
run;
proc print; run;
data a;
input x comma7.2 y comma7.4;
cards;
12,002 34,231 2,210 21,311 run;
proc print; run;
data a;
input x dollar8. y dollar8.4; cards;
$12,002 $34,231 $2,210 $21,311 run;
proc print; run;
3、日期时间型输入/输出格式
? 日期,时间,日期时间型的数据均以与0值的差值数据存入计算机。? 零点值的规定
日期型: 0 值(1960.1.1),其他日期为与其的差值 时间型: 0值(0时0分0秒)
日期时间型 0值(1960年1月1日0时0分0秒)
? 日期输入格式 :YYMMDDw.
读入的数据形式为:yymmdd / yyyymmdd W:6-32,缺省为6
其他格式:MMDDYYw. 和DDMMYYw.
MMDDYYw.读入的数据形式为:mmddyy/mmddyyyy DDMMYYw.读入的数据形式为:ddmmyy/ddmmyyyy
? 日期输出格式 :YYMMDDxw.
读入的数据形式为:yymmdd / yyyymmdd W:2-10(x为N时,2-8),缺省为8 x B C D N P S 分隔符 空格 : - 无 . / YYMMDDw.相当于YYMMDDDw. 其他格式:MMDDYYxw. 和DDMMYYxw.
? 特殊日期输入/输出格式:DATEw.
输入/输出日期的格式为:ddmmmyy/ddmmmyyyy 缺省方式为DATE7.
? 时间输入格式:TIMEw. 读入的时间形式为:hh:mm:ss.ss 时分秒间的分隔符有:(:),(空格),(-);还有PM,AM
例:1 40 35.37 PM 读入格式time14. 49235.37 输出格式timeampm13.2 1:40:35.37 PM
? 时间输出格式:TIMEw.d d:可指明秒数包含的小数位数。 输出时总带有分隔符(:)
宽度不够时,先显示小时数,再是分钟,再是秒数。
? 日期时间输入格式:DATETIMEw.
读入的日期时间形式为:ddmmmyy hh:mm:ss.ss/ddmmmyyyy hh:mm:ss.ss W:13-40,缺省18
? 日期时间输出格式:DATETIMEw.d
输出格式形式:ddmmmyy:hh:mm:ss.ss/ddmmmyyyy:hh:mm:ss.ss W:7-40,缺省16
宽度不够时,从秒数开始截尾,宽度足够时(w>=19+d)时自动显示四位数的年份。
? 两位数年份输入
YEARCUTOFF=1920(此值可修改) 管理100年的时间:1920-2019
例:12/07/41 表示12/07/1941
18Dec15 表示18Dec2015
3.2 SET语句
1一般描述
格式:SET <数据集<数据集选项>> <选项> 语法 子项 说明 数据集 一个或多个 最多50个数据集 数据集选项 KEEP=变量(组) DROP=变量(组) RENAME=(旧变量名=新变量名) WHERE=表达式 IN=变量 FIRSTOBS=常数 OBS=常数 选项 NOBS=变量 POINT=变量 END=变量 KEY=索引名 创建新_IORC_,显示最近I/O操作序号,若KEY=值没找到,则返回_ERROR_=1 KEY=UNIQUE 规定从数据集索引的开关开始搜索 2例子:
keep
data keep;
set sashelp.class(keep=name sex); run;
data d1(keep=name) d2(keep=name sex);/*这是定义处使用*/ set sashelp.class(keep=name sex);/*这是调用处使用*/ run;
rename
data rename;
set sashelp.class(keep=name sex rename=(name=name_new sex=sex_new)); run;
where
data where;
set sashelp.class(keep=sex where=(sex='M')); run;
In的使用
data one;