|
sas知识基础学习(中篇)
sas常数:数值常数;常见的数字:标准格式:1,-1;科学计数法:1.1e11;十六进制格式:1cx,12x,9x;x表示为十六进制
字符常数:用单引号括起来,如果字符常数内含有引号,引用时,要么它的引号用两个连续的单引号,要么用一个双引号。
日期时间常数:要使用相应的格式值,格式值带单引号,后面跟一个d(日期),t(时间),dt(日期时间)
'01jan00'd;'9:25't,'12jan02:9:27:00'dt
十六进制字符常数:'533'x,x紧跟在引号部分后面。
data;
x='good ';
y='morning';
z=x||y; /*连接算符||,<>取最大,><取最小 */
put z;
run;
good morning
NOTE: The data set WORK.DATA38 has 1 observations(观测)
and 3 variables(变量).
NOTE: DATA statement used (Total process time):
real time 0.01 seconds
cpu time 0.00 seconds
sas变量:数值变量,字符变量
数值变量是以浮点(floating-point)方式存储的数据变量,数值变量包括日期和时间. 数值变量的值只能是数值。
字符变量名后跟一个美元符($):表示该变量是字符型而不是数值型。
sas变量属性:包括长度,输入输出格式和标签。
创建变量:使用赋值语句;使用input语句;使用format语句或informat语句;使用length语句;使用attrirb语句
使用赋值语句:如果等号左边的变量不存于数据集中,则赋值语句会产生一个新的变量
使用input语句:input
x $;
format和informat分别设定变量的输出和输入格式。
变量类型转化:字符自动转化为数值
data ;
x=1;
y='10';
z=x+y;
put z;
run;
input函数 :input(数据源,输入格式)将字符转化为数值
data;
y=input('5688',$3.);
put y;
run;
数值能自动转化为字符:
data;
x='10';
y=10;
x=y;
put x;
run;
NOTE: Numeric values have been converted to character values at the places
given by: (Line):(Column).
put函数将数值转化为字符:put(数据源,输出格式):
data;
x=3888.00;
y=put(x,8.3);
put y; --结果是
3888.000
run;
data;
x=put('28000.00',$3.);
put x; --结果是280
run;
data;
x=put('280.00',$5.);
put x; --结果是
280.0(五位数,包括小数点)
run;
sas自动变量:由数据步语句自动创建的。
_n_ :观测序号;
_error_错误信息变量; _numeric_ 所有数值变量;
_character_所有字符变量;
_all_所有变量;
fisrt.variable同一by组第一个观测;last.variable同一by组最后一个观测;
日期时间函数:
data;
x=date ();
y=today();
format x y yymmdd10.;
put x= y=;
run;
结果是x=2004-11-07
y=2004-11-07
data _null_;
sdate='01jan2002'd;
edate='01jan2003'd;
actual=datdif(sdate,edate,'act/act'); --按照每个月的实际天数算
days30=datdif(sdate,edate,'30/360'); --按照每个月30天算
put actual= days30=;
run;
结果是:actual=365 days30=360
data;
n=datetime();
put n=;
x=datetime();
put x=;
format x datetime20.4;
y=datetime();
put y=;
format y nldatm20.;
m=time();
put m=;
z=time();
put z=;
format z hhmm8.2;
run;
结果是:n=1415483760.8
x=07NOV04:21:56:00.843
y=04-11- 7 下午09:56
m=78960.843
z=21:56.01
data;
h=hour(datetime()); put h=; --计算当天时间的小时数
m=minute(datetime()); put
m=; --计算当天时间的分钟数
run;
结果是:h=21
m=58
data;
mdy=mdy(08,18,2001);
put mdy=;
format mdy yymmdd10.;
hms=hms(21,50,51);
put hms=;
x=21*60*60+50*60+51;
put x=;
dhms=dhms(date(),21,50,51);
put dhms=;
dhms=dhms(15263,21,50,51);
put dhms=;
y=15263*24*3600+x;
put y=;
run;
结果是:mdy=2001-08-18
hms=78651
x=78651
dhms=1415483451
dhms=1318801851
y=1318801851
import过程步:
proc import
datafile="filename"|table="tablename"
out=sas-data-set
其中:datafile=
规定要读入外部文件的地址及其名称;table=规定外部数据文件中表名;out=规定要输出的sas数据集;
dbms=规定外部数据文件格式的标识名;replace
规定替换已存在文件
PROC IMPORT OUT= CE1.DEPT222
DATAFILE=
"E:\ce2.xls"
DBMS=EXCEL REPLACE;
SHEET="EMP1";
GETNAMES=YES; /*获取字段的名字
*/
MIXED=NO;
SCANTEXT=YES;
USEDATE=YES;
SCANTIME=YES;
RUN;
libname建立逻辑库和数据库连接:
libname oralib oracle
user=scott password=p path=liutest dbindex=y
--和oracle类型的数据库连接
取消逻辑库:libname
oradb clear; --oradb是逻辑库名字
和db2的连接:libname
db2lib db2 authid=scott ssid=p;
820 libname ce1
clear;
NOTE: Libref CE1 has been
deassigned.

Powered by Discuz! X2.5 © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 ) 论坛法律顾问:王兆丰
GMT+8, 2026-4-12 05:01 , Processed in 0.258025 second(s), 27 queries .