QQ登录

只需要一步,快速开始

 注册地址  找回密码

tag 标签: sas知识基础学习

相关帖子

版块 作者 回复/查看 最后发表

相关日志

分享 sas知识基础学习(三)
zuster 2012-7-24 00:15
sas 知识基础学习(下篇) 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. 数据步读入原始数据:要使用 input , datalines 和 infile 语句 使用 input 语句读入原始数据: input 语句的 5 种输入方式:简单方式,列方式,格式化方式,列表方式,命名方式。 input 的列方式 : 用来读入严格排列好的标准数据 data liu1.scores; -- 输入到逻辑库 liu1 的表 scores 里面 infile datalines truncover; input name $1-10 sex $11 age $12-15; -- 行的第 1 到 10 列的值为 name 的输入值, 11 列为 sex 的值, 12 到 15 列值是 age 的值 datalines; justine F 12 bob M 13 run; 列表方式;要求 input 语句按照读入数据的顺序设定变量名称。列表方式下的分隔符默认为空格。 用列表方式的条件:输入数据值之间至少由一个空格隔开;用小数点表示缺省值。 :格式修饰符:要对变量值长度不一致的变量规定统一长度就必须用到该格式修饰符。 sas 默认字符长度 8B data liu1.blank; input univ:$12. plc$ zip; cards; mit boston 100023 tsinghuauniv beijing 100084 run; 如果不对 univ 归档长度,读入第二条记录时就会只读入 tsinghua ( 8B ),就会报错。 格式修饰符:字符型输入值可能包含一个或几个空格,如果要读入的数据值本身包含空格时就必须用此格式符。 data liu1.blank; input name $12. age; cards; jiang zhu 20 --jiang zhu 数据值本身有空格 annie zheng 31 I.altman 60 run; 因为 的特性,数据之间应该用两个以上的空格隔开。 ~ 格式修饰符:规定读入字符值保留引号,此格式修饰符只能在 infile 语句于选项 dsd 一起使用才有效。 DSD :将默认分隔符改为逗号;如果不加 ~ 则自动会把数据中的引号去掉。 data liu1.blank; infile datalines dsd; input speakers : $15. title ~$40. location $10.; datalines; song, "credit derivatives",room 329 -- 上面的 ~ 格式符会把引号保留 run; 格式化方式: 是 input 语句读取非标准数据的唯一方法。 格式化方式输入: data ; infile datalines ; input (x1-x5) (3*7.2, 2*5.2); ... n* 规定在输入列表中后面的输入格式重复 n 次;上面前 3 个变量 x1-x3 格式为 7.2. 后两个变量 x4-x5 格式为 5.2 data liu1.blank; input x comma9.2; datalines; $1,000.22 -- 该数据符号加上数字一共是 9 列;结果是 1000.22 run; 分组格式表:含有两个列表 input (s1-s5)(4.) /* s1 到 s5 取值宽度均是 4. */ input (a b)($,5.) /* a 的格式是 $,b 的格式是 5. */ input (name s1-s5)($10. 5*4.) /*name 格式是 $10. s1 到 s5 格式是 4. */ data liu1.blank; input (name score1-score5)($10. 5*4.); datalines; whittaker 121 114 137 156 142 smythe 111 97 122 143 127 run; 命名方式输入:如果数据行中有变量的值,后面跟着等号和变量的值,读取数据时应该使用命名输入方式。 input date yymmdd10. fullshr stkcd=$ lstknm=$ ; 数据步文件管理: data 语句: data; 系统自动规定数据集名 datan, data a; 创建临时数据集 a, data resdat.a; 创建永久数据集 resdat.a data data1 data2; 创建两个临时数据集 data1 和 data2, data _null_; 特殊名,不创建 sas 数据集,用于输出 data _null_; input (name score1-score5)($10. 5*4.); datalines; whittaker 121 114 137 156 142 smythe 111 97 122 143 127 run; data data1 data2; -- 创建两个临时数据集 data1 和 data2 ,保存在 work 逻辑库里 run; data _null_; 常和 put 用,用来输出结构,只输出到 log 窗口,不会产生 sas 数据集。 cards 语句: cards 语句和 datalines 语句告诉 sas 系统下面跟着的是数据行 数据行中有分号时,要用 cards4 语句或 datalines4 语句 data _null_; input var1 var2var3; cards4; a;b(;);; run; put 语句: sas 系统的 log 窗口; sas 系统的 output 窗口; file 语句规定的外部文件; input 用于输入, put 用于输出 by 语句;用于规定分组变量,用于控制 set 、 merge 、 update 或 modify 语句的操作。 set 语句:从一个或多个已存在的 sas 数据集中读取观测值,并将这些观测值组合在一个数据集中 file 语句;用于规定将要输出的外部文件。 infile 语句:用来定义一个外部数据文件。 data 语句表示数据步开始。 keep 语句:规定输出数据中要保留的变量 drop 语句:规定输出数据集中要删除的变量。
535 次阅读|1 个评论
分享 sas知识基础学习(二)
zuster 2012-7-23 23:56
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.
720 次阅读|0 个评论
分享 sas知识基础学习(一)
zuster 2012-7-23 23:52
sas 知识基础学习(上篇) sas 有两种语句: 数据步和过程步。在 sas 中,通过数据步和过程步来使用 sas 语言的元素。 数据步:是一组语句组合:从外部文件中读取数据;将数据写入到外部文件中;读取 sas 数据文件和视图;创建 sas 数据文件和视图。 过程步: 对 sas 数据集进行分析和产生报表。例如:对数据集进行分析、画图、查询和打印等操作。 逻辑库: 由一组 sas 文件组成。 sas 软件系统的信息组织有两层,第一层是 sas 逻辑库,第二层是 sas 文件。 sas 逻辑库是一个逻辑概念,本事并不是物理实体,它对应的实体是操作系统下一个文件夹或几个文件夹中的一组 sas 文件。 sas 逻辑库是一组存储在同一目录下被同一引擎访问的文件,其他文件也可以存放在该目录下,但是只有能被 sas 识别的文件才能显示在逻辑库中。 建立 sas 逻辑库: 用 libname 语句 libname libref engine'sas-data-library' 其中 libref 是逻辑库名, sas-data-library 是逻辑库对应的物理地址, engine :引擎名称。 libname resdat 'D:\resdat'; 创建逻辑库 resdat ,对应的物理文件夹为 D:\resdat libname a ('d:\resbd\','d:\resfin\'); 多个文件夹创建一个 sas 逻辑库 临时逻辑库: 指它的内容只在启动 sas 时存在,退出 sas 时内容完全被删除。系统默认的临时逻辑库为 work ,引用临时库中的文件时,可以不加库名 work 。 永久逻辑库: 它的内容在 sas 关闭对话之后仍旧保留,直到再次修改或删除。 sas 除了 work 以外的逻辑库都是永久库。引用永久逻辑库的文件时必须加上永久逻辑库名。例如: sashelp.Abmfolder 库引擎: 是一组规定格式想逻辑库读写文件的内部命令。每个 sas 逻辑库都对应一个库引擎。 sas 逻辑库引擎是软件的一个元件用来组建 sas 与 sas 逻辑库之间的接口。 库引擎功能: 读取和写入数据;列出库中的文件;删除和重命名文件。 数据集分类: sas 数据集有两类: sas 数据文件 ; sas 数据视图 。 sas 数据文件 同时描述信息和存储数据值,而 sas 数据视图则并不实际上存储数据,实际上 sas 数据视图就是一个查询语句。 这个查询语句建立了一个逻辑数据集,每次打开 sas 数据视图就相当于运行了一次查询语句。 注意:这两个数据文件在同一级目录或逻辑库下不能同名。 数据集构成:描述信息,数据值。 数据文件: sas 数据文件是包含描述信息和数据值的 sas 数据集。 普通的 sas 数据文件: sas 格式的数据文件。 接口数据文件: 以其它数据软件格式储存数据的数据文件。 sas 数据文件和 sas 数据视图最大区别就数据文件实际储存数值,视图只是包含表的描述信息以及一组用来读取数据的查询语句,并不实际存储数据。 数据文件是静态的,而视图则是动态的;视图每次打开就相当于运行了异常查询语句,只有数据源发生变化,打开试图就会发生变化,而数据文件 只有自身被修改时才会发生改变。 sas 视图: native view :由数据步或 sql 过程创建 interface view :由 sas 软件创建。 数据步视图: 包含用于从多个数据源中读取数据的数据步程序:原始数据文件; sas 数据文件; proc sql 视图; sas/access 视图 定义格式: data 数据集名称 /view= 数据集名称 ; ... sas 语句 ; .... run; 上面的定义中,在 data 步中的最后一个数据集名称后加上 "view= 数据集名称 ", 告诉 sas 程序进行编译,但不运行,而被编译的程序编码则 储存在 view 后的数据视图中。 例如:创建数据步视图: data resdat.class1/view=resdat.class1; set resdat.class; run; proc sql 视图: 是一个带有名称的 proc sql 查询。它可以读写的数据源同数据步视图。 例如 : proc sql; create view resdat.e as select * from resdat.class; quit; 表词典: 是一个包含多个 sas 系统信息的 sas 数据视图。下面是一个使用 proc sql 查询表词典的例子 : proc sql; select libname,memname,memtype,nobs from dictionary.tables where libname='CE1'; quit; 使用 proc sql 来查询所需要的表词典,这些表储存在 dictionary 逻辑库中。 输入输出格式: $ 指定为字符格式,如果该项空缺,则默认是数值格式; format: 规定有效 sas 输出格式; informat :规定有效 sas 输入格式; w :设定输入输出的长度,一般是数据所占的列的数目; d :设定数值数据中小数点的位数; sas 系统选项: options option(s); --option 设定一个或多个系统选项。 options obs=5; -- 取数据集的前 5 个观测(行), obs : observations
616 次阅读|1 个评论
qq
收缩
  • 电话咨询

  • 04714969085

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-12-19 22:22 , Processed in 1.531256 second(s), 26 queries .

回顶部