




已阅读5页,还剩34页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
一、VAR语句VAR语句在很多过程中用来指定分析变量。在VAR后面给出变量列表:VAR 变量名1 变量名2 变量名n;变量名列表可以使用省略的形式,如X1-X3,MATH-CHINESE等。VAR用法例如: var math chinese;WHERE语句WHERE语句的格式很简单,只要后面跟用于数据筛选的逻辑表达式即可:WHERElogical-expression(s);下面的例子基于 test1 数据表生成 test2 数据表,但是只选择满足 sex=F 并且 age20 的数据行:datatest2;settest1;wheresex=FANDage20;run;表面看来,WHERE语句和数据步骤中的SAS IF 语句的功能相近,都是筛选数据和。实际上WHERE语句和IF语句的运作机制是不同的。WHERE语句相当于对数据集执行了一个 SQL Select 的操作。也就是说,在进入到操作前数据已经被整体筛选过了,而IF语句是在数据步骤的每个循环中单独执行的,WHERE语句显然效率要提高很多。如果数据表是索引过的,那么WHERE语句能够更加显著地提高效率。WHERE语句也有其限制。因为它是对现存的数据表的整体性操作,故而只能对该数据表中已有的变量进行筛选操作,不能对数据处理后生成的变量操作,也不能对INPUT语句定义的变量操作。WHERE语句不但能用于数据步骤中还能用于过程语句中。操作符除了一般的 SAS 操作符(见SAS 语法),WHERE语句还支持一些特有的操作符。between . and。比如:wherexbetween10and20;其实相当于:where10=x10;wheresameandsex=F;以上两句相当于一句:whereage10andsex=F;min和max。两数中的较小或较大者。比如:where x = (a min b);print语句PRINT过程是最常用的SAS过程之一。我们在生成了一个数据集之后,如果不是太大,一般都用一个proc print;run;过程步来列出数据集的内容,这样可以检查变量与值之间对应是否正确,数据输入是否正确。为了列出一个指定的数据集,在PROC语句中使用DATA选项指定要列表的输入数据集名,比如:proc print data=sasuser.gpa; run;在过程内使用VAR语句可以指定要列出的变量并指定顺序。比如,proc print data=c9501; var name chinese sex; (这里的顺序决定输出的结果顺序)run;列出变量NAME、CHINESE、SEX的值。注意这已不是生成时的变量顺序。变量MATH未列出。结果如下 The SAS System 3 OBS NAME CHINESE SEX 1 李明 98 男 2 张红艺 106 女 3 王思明 90 男 4 张聪 109 男 5 刘颍 110 女注意PRINT的输出第一列总是标为OBS,值为观测序号。我们有时不想输出这一列,可以在PROC PRINT语句中加入NOOBS选项,如:proc print data=c9501 noobs;run;结果中就没有了OBS这一列。 在过程中使用WHERE语句可以从输入数据集中选一个子集来处理,在PRINT过程中使用WHERE 可以指定只列出满足条件的观测。比如,proc print data=c9501; where name in (李明, 张聪);run;结果为 OBS NAME SEX MATH CHINESE AVG 1 李明 男 92 98 86.8333 4 张聪 男 98 109 94.4167只列出了李明和张聪两个人的观测。注意其观测序号分别为1和4,这是生成C9501数据集时确定的。SAS 的运算符算术运算符表示意思比较运算符表示意思逻辑运算符表示意思*/+-乘方乘法除法加法减法=或EQ=或NE或GT=或GE 或LT=或LE等于不等于大于大于等于小于小于等于ANDORNOT逻辑与逻辑或逻辑非contents函数在编程环境下查看数据对象的描述部分可用以下过程:proccontentsdata=sasuser.airposition;run;(position是位置的意思)engine 的本义据美国传统字典:A machine that converts energy into mechanical force or motion。所以其要义在 Convert转换.在SAS里,应该是对外部数据格式如EXCEL、ACCESS、ORACLE,SAS自己的数据版本如V6、V8等进行格式转换,以便SAS读取,写入。我觉得是引擎的意思吧,SAS9.2里默认的就是V9,如果连接其他引擎如oracle,db2,access等数据库引擎,就要加上这个引擎名告诉SAS连接该库引擎“libname oratabs oracle user=USERNAME orapw = PASSWORD path = INSTANCE schema = TRIALNAME;”上面这个中的 oracle 甲骨文就是一种engine engine就是一种系统或文件方式之类的我讲不清,比如SPSS,Excel都能是engine.引擎的作用就是告诉sas,目标文件的格式是什么,应该怎么进行数据操作.libname语句指定sas逻辑库: libname libref sas-data-library其中libref是逻辑库名,sas-data-library是逻辑库对应的物理地址,engine:引擎名称。 libname resdat D:resdat;-创建逻辑库resdat,对应的libname语句: 其中的物理地址要存在,就可以了,建立新的逻辑数据库libnamebasesasG:sas;databasesas.aa;setsasuser.sample;run;Libname、filename、数据集data区别25.指定逻辑库名的语句的一般形式为:libname 逻辑库名 库的实际地址;26在程序编辑器窗口提交语句: libname 逻辑库名 list;可以在log窗口显示该逻辑库的连接;27.多个物理位置指定同一个逻辑库名的一般形式为:libname 逻辑库名(物理位置1 物理位置2);28. 指定逻辑文件名语句的一般形式为:filename 逻辑文件名 文件位置;就是就文件的一份存储位置或者说文件名指定一个代号,或者称号,和libname不同点就是Libname就是指定和文件名的一个对应关系,数据集就是逻辑库的一个数据集合,可以这么说:libname和data是sas里面的,filename不是的SAS分列的各种方法假设变量a是几种产品的组合,产品名之间以号连接,如下变量aa+bab+c+da+dec+bdfs+jk现在的问题是想分列,每个产品自成一列,变成如下形式变量a1变量a2变量a3变量a4ababcdadecbdfsjk1、一般做法如下:data test;input a $20.;datalines;a+bab+c+da+dec+bdfs+jk;run;data out;set test;array arr$ a1-a4;do i=1 to 4;arr(i)=scan(a,i,+);end;drop i;run;2、考虑到实际情况中目标变量的数目可能未知的情况,改进如下:data test;input a$20.;cards;a+bab+c+da+dec+bdfs+jk;run;proc sql noprint;select max(count(a,+)+1 into:numfrom test;%macro group(n);data out;set test;%do i=1 %to &n;new&i=scan(a,&i,+);%end;run;%mend;%group(&num);data out(drop=i);set test;array new(&num)$;do i=1 to #new(i)=scan(a,i,+);end;run;3、巧用装置法:data test;input a$20.;cards;a+bab+c+da+dec+bdfs+jk;data temp;set test;do col_id=1 to count(a,+)+1;row_id=_n_;val=scan(a,col_id);output;end;run;proc transpose data=temp out=out(drop=_name_) prefix=val_;id col_id;by row_id;var val;run;以下是个人对PDV的粗浅总结,希望各位高手补充指正。什么是PDV个人认为可以把PDV想象成一排用于存放变量值的盒子。每个盒子代表一个变量。提交一个DATA步后,SAS会对这个DATA步进行编译,然后执行。首先,PDV是在DATA步的编译阶段生成的。(编译会进行语法检查并创建一排整齐摆放的”盒子”);然后,在DATA步的执行阶段,根据不同语句对PDV中变量的值进行清空或更改。(将盒子清空或换上新的物品);最后,在RUN;语句或者OUTPUT;语句将PDV中变量的当前值输出到目标数据集中。KEEP,DROP语句或KEEP=,DROP=数据集选项会影响输出到目标数据集中变量的个数。(如果没有KEEP/DROP,将新建变量和数据集变量对应的盒子搬出到目标数据集;如果只有KEEP,则只搬KEEP指定的盒子;如果只有DROP,则不搬DROP指定的盒子;如果KEEP/DROP同时存在,则只搬KEEP-DROP后剩下的盒子)PDV中变量的个数及顺序DATA步中所涉及到的所有的变量,包括新创建的、从其他数据集读取的(SET)、以及自动生成的变量。自动生成的变量包括:_ERROR_,_N_; 或是FIRST.VAR,_IORC_等由某个语句或选项所自动产生的变量。默认情况下,自动生成的变量不会输出到目标数据集中。PDV中变量按照先来后到的原则,是根据其在DATA步中第一次出现的位置决定整个PDV中的变量顺序。同样,这是在DATA步的编译阶段确定的。(在SET语句中,数据集选项IN=所指定的变量会在数据集变量之前)PUT _ALL_; 语句会将PDV中所有的变量按照其在PDV中的顺序输出到log中。例如下面这个例子: data test; aaa=1; set sashelp.class(keep=name sex in=in1); by name; bbb=bbb; set sashelp.class(keep=age weight height in=in2); put _all_; run; 在PDV中共有13个变量,包括两个新创建的(aaa,bbb),5个数据集中的,6个自动生成的(in1,,,in2, _error_, _n_)。顺序为:aaa, in1, name, sex, , , bbb, in2, age, weight, height, _error_,_n_。关于PDV中变量值的RETAIN一般情况下,DATA步的执行是一个循环的过程,也就是SAS运行到DATA步最后一句后会默认回到DATA语句继续执行。在回到DATA语句再次执行这个DATA步的代码的时候,就会涉及到是否对PDV中变量已有的值清空,这就是RETAIN要做的。 (这里用“一般情况下”,是因为有些情况下,SAS不会回到DATA语句,而是在RUN;语句就结束了。如: * No data read from outside; data a; put _all_; x=1; run; * No data read from the first iteration(_N_=1); data b; x=2; put _all_; if x=1 then set sashelp.class; run; )回到PDV:a. 在DATA步刚开始执行的时候: 自动生成变量会被附上初始值:_N_=1, _ERROR_=0,FIRST.VAR=1, LAST.VAR=1, 等等; 如果RETAIN语句对某变量设置了的初始值,则对应的变量被设为指定的值; SUM语句(如a+1;)的变量会被初始化为0; 其他的变量,包括新建变量和SET的数据集对应的变量都会被设为空值。b. 当SAS执行过程中再次回到DATA语句时: 自动生成变量的值会被retain; 如变量来自RETAIN语句、SUM语句、或数据集中,则变量值会被retain; 其他的变量会被置空。例如,可以根据下面DATA步所产生的log来判断变量的retain情况: proc sort data=sashelp.class out=class; by age; run; data test; put =; put At begnning: _all_; aaa=_N_; set class(keep=name age in=in1); by age; bbb+age; retain ccc 0; ccc=age+ccc; retain ddd; ddd=sum(ddd,age); put At ending : _all_; run; 合并DATA a;input type $ City $;cards;A 上海A 广州B 北京C 重庆C 天津C 南昌;RUN;PROC sort data = a;by type;RUN;DATA b;length City_combine $ 256;retain City_combine;set a;by type;if first.type + last.type = 2 then do; City_combine = City; output;end;else if first.type then City_combine = City;else do;City_combine = compress(City_combine)!, !compress(City);if last.type then output;end;RUN;PROC sort data = sasuser.test;by VAR1;RUN;DATA sasuser.test1; length res_code $ 256;retain res_code;set sasuser.test;by VAR1;if first.VAR1 + last.VAR1 = 2 then do; res_code = VAR2; output;end;else if first.VAR1 then res_code = VAR2;else do;res_code = compress(res_code)!,!compress(VAR2);if last.VAR1 then output;end;RUN;Length语句SAS变量的基本类型有两种:数值型和字符型。日期、时间等变量存为数值型。SAS的数值型变量可以存储任意整数、定点实数、浮点实数,一般不关心其区别。数值型变量在数据集中的存贮一般使用8个字节。SAS的字符型变量缺省的长度是8个字符,但是如果在INPUT 语句中输入字符型变量时指定了长度则不受此限制。可以用LENGTH语句直接指定变量长度,LENGTH 语句一般应出现在变量定义之前,格式为:LENGTH 变量名 $ 长度;例如LENGTH name $ 20;$和$,表示字符型变量:一行有多个观测值时,使用,sas将在读完一个观测后保持在该行继续读取下面的观测值,直到所有观测读完或者到input后面的变量完为止。祥见相关书籍:如thelittle sas book等等datalines cards一样的数值类型SAS常量主要有数值型、字符型两种,并且还提供了用于表达(不是存储)日期、时间的数据类型。例如 数值型:12,7.5,2.5E10 字符型:Beijing,Li Ming,李明 日期型:13JUL1998d 时间型:14:20t 日期时间型:13JUL1998:14:20:32dt 赋值的时候可以写成这个样子赋值,DATA x; x=14:20t; run;但是存储的时候还是数值类型日期格式的时候你声明了 是D或者T了sas自动日期转化为数字到存储地方,在展现的时候,用format语句就可以了,不过格式不带T的数值型常数可以用整数、定点实数、科学计数法实数表示。字符型常数为两边用单撇号或两边用双撇号包围的若干字符。日期型常数是在表示日期的字符串后加一个字母d(大小写均可),中间没有空格。时间型常数是在表示时间的字符串后加一个字母t。日期时间型常数在表示日期时间的字符串后加字母dt。因为SAS是一种数据处理语言,而实际数据中经常会遇到缺失值,比如没有观测到数值,被访问人不肯回答,等等。SAS中用一个单独的小数点来表示缺失值常量。SAS变量的基本类型有两种:数值型和字符型。日期、时间等变量存为数值型。SAS的数值型变量可以存储任意整数、定点实数、浮点实数,一般不关心其区别。数值型变量在数据集中的存贮一般使用8个字节。SAS的字符型变量缺省的长度是8个字符,但是如果在INPUT 语句中输入字符型变量时指定了长度则不受此限制。可以用LENGTH语句直接指定变量长度,LENGTH 语句一般应出现在变量定义之前,格式为:LENGTH 变量名 $ 长度;例如LENGTH name $ 20;标准的数字型:如不带货币符号,千分位号等标准的字符型:如字符中间不嵌空格等存储的都是 标准的格式日期格式sas 输入日期格式是16JAN2014,日月年+d;(赋值的时候输入,且只能输入这种格式,可能是d的写法的特别规定,但是在input、informat中可以09-01-12这种写法,这是格式为ddmmyy,format中不存在这种问题)因为输入的时候不用jan的话,sas区分不了年月日输出的格式可以是这样(date9.)这是显示16JAN2014,也可以yymmdd9.,ddmmyy8.datetime.(月份也是英文缩写)、time.(表面意思)Day. 输出日期中“天” :16 month.为输出为月 :1SAS 输入格式就是告诉sas这是日期格式的,不是数字,存储的时候要转化,比如:13JUL1998d和下面的日期函数,而货币等格式中输入和输出的格式一样写的,赋值语句中日期也想写成一样啊,但是我们写的时候将datetime简写了而已没有输入格式的话,sas会把我们的数据当成字符或者数字,直接放在sas存储里面,输出的时候就算转换格式的话,也会转化成其他的日期格式,下面的日期函数也差不多 SAS系统提供的几种常用输入输出格式:w.d 标准的数字型格式$w. 标准的字符型格式commaw.d 数字中加入逗号dollarw.d 数字中加入逗号,数字前加入$datew. 日期格式bestw. SAS选择最佳表示法而01jan13d不过是格式的补充而已,在赋值语句使用(暂未发现其他的使用方法)无论informat还是format语句,数据格式还是一样的日期函数(不管输入输出的,有参数就出现,一般用在赋值输入格式中)TODAY() 当前系统的日期值 (年月日) TIME() 当前系统的时间值 (时分秒) DATE() 当前系统的日期值 (年月日) DAY(自变量) 自变量的月内日期值(1-31) day(02dec66d)=2-day里面的变量存储的是数字,直接转化为日期格式,求天值WEEKDAY(自变量)自变量的周内参数(1-7) weekday(02dec66d)=6MONTH(自变量) 自变量的月份值(1-12) month(02dec66d)=12QTR(自变量) 自变量的季度值(1-4) qtr(02dec66d)=4YEAR(自变量) 自变量的年份值 year(02dec66d)=1966WEEKDAY(自变量)的值为1,表示的周日,周一为2,依此类推。valueVALUE语句定义一种值输出格式,可把某变量的值按所定义的格式输出。可把数值变成字符或把字符转变成另一字符。每一VALUE语句可定义一种格式,在一个FORMAT过程中,你可以使用多个VALUE语句定义多个格式。在format语句使用INPUT语句在数据步中输入数据可以从原始数据输入,也可以从已有数据集输入。从原始数据输入要使用INPUT语句来指定输入的变量和格式。数据行写在CARDS语句和一个只有一个顶头的分号的行之间。最简单的INPUT语句使用自由格式:按顺序列出每个观测的各个变量名,中间用空格分开。变量如果是字符型的需要在变量名后面加一个$符号,符与变量名可以直接相连也可以隔一个空格。例如:data c9501; input name $ sex $ math chinese; cards;李明 男 92 98张红艺 女 89 106王思明 男 86 90张聪 男 98 109刘颍 女 80 110;run;注意这个例子的数据有五个观测,四个变量,每行数据的各变量之间用空格分隔。为输入这些数据,INPUT语句中依次列出了四个变量名,并在字符型变量NAME和SEX后加了$符。要生成一个数据集这是最简单的写法。使用自由格式也有一些限制条件,如果不满足这些条件时需要改用其它输入格式: 数据每行为一个观测,各数据值之间用空格或制表符分隔 无论是字符型还是数值型缺失数据都必须用小数点表示 字符型数据长度不能超过8个字符,不允许完全是空白,中间不允许有空白,开头和结尾如果有空白将被忽略 在INPUT语句中必须列出观测中的每一项数据对应的变量名而不能省略中间的某一个在满足以上条件时就可以使用自由格式,它也有明显的优点:使用简单;输入数据时不必上下对齐;不需要知道每个变量的具体列数而只需知道它的次序。如果各数据行的各个数据项是上下对齐的,还可以使用INPUT语句的列方式。这时,除了在INPUT关键字后面列出变量名外,还需要在每个变量名(及$符)后面列出该变量在数据行中所占据的列起始位置与结束位置,比如上面的例子可以改写成:data c9501; input name $ 1-10 sex $ 11-13 math 14-16 chinese 18-20; cards;李明 男 92 98张红艺 女 89 106王思明 男 86 90张聪 男 98 109刘颍 女 80 110;run;使用列方式时一定要正确数出每一项所占的位置。列方式有如下特点: 要求数据行各项上下对齐 各项之间可以没有任何分隔,连续写在一起 字符型数据长度可以超过8个字符,中间可以有空格,头尾的空格仍将被忽略。 不论字符型变量还是数值型变量如果指定列位置都是空白则输入值为缺失值。小数点仍表示数值型和字符型变量的缺失值。 可以只输入数据行中的某些项而忽略其它项。列方式不要求数据项之间分开,所以经常用来输入紧缩格式的数据。比如,我们要输入一批身份证号码,但只输入其中的出生年、月、日信息,就可以用如下程序:data pids; input year 7-8 mon 9-10 day 11-12; cards;110103751209223110101690215005;run;列格式可以与自由格式混用,见1.1.3的例子。如果需要完全原样地输入字符型数据(包括头尾空格、单独的小数点),可以用有格式输入,即在字符型变量名和$符后加上一个输入格式如CHAR10.表示读入10个字符。有特殊格式的数据需要用有格式输入,即在变量名后加格式名。其中最常见的是用来输入日期。数据中的日期写法经常是多种多样的,比如1998年10月9日可以写成“1998-10-9 ”,“19981009”,“9/10/98”等等,为读入这样的日期数据就需要为它指定特殊的日期输入格式。另外,日期数据在SAS中是按数值存储的,所以如果要显示日期值,也需要为它指定特殊的日期输出格式。例如:data a; input date yymmdd8. sales; format date yymmdd10.; cards;56-6-13 110067.12.15 120078 10 2 1300891001 140019960101 150020020901 1600;run;proc print;run;或者:data a; input date sales; informat date yymmdd8.; cards;56-6-13 110067.12.15 120078 10 2 1300891001 140019960101 150020020901 1600;run;proc print;format date yymmdd10.;run;理论上俩说两个语句的结果应该一样,但是input的转换和informat的转化顺序上的不同,input输入的时候, 他就丢掉了“2 1300”其中日期数据占据8列位置,如果不满8列要用空格补充,不能让后面的数据进入这8列。这样可以输入没有世纪数,年、月、日之间用减号、小数点、空格分隔的日期,可以输入YYMMDD 格式的六位数的日期(一位数的月、日前面补0),可以输入带世纪数的YYYYMMDD格式的日期(一位数的月、日前面补0)。FORMAT语句规定输出日期变量时使用的显示格式。结果为: 1 1956-06-13 1100 2 1967-07-11 1200 3 1978-10-02 1300 4 1989-10-01 1400 5 1996-01-01 1500 6 2002-09-01 1600用YYMMDD10.输入格式可以输入带世纪数的中间有分隔符或无分隔的日期,如:data b; input date yymmdd10. sales; format date yymmdd10.; cards;56-6-13 110067.12.15 120078 10 2 1300891001 140019960101 150020020901 16001956-6-13 11001967.12.15 12001978 10 2 130019891001 140019960101 150020020901 1600;run;proc print;run;如果日期变量不是第一个,则它的前一项最好使用列格式并且指定结束列号为日期值的前一列,或者前一项也使用指定输入格式的输入方法,并且使前一项的输入域宽占满日期前的列。如果用自由格式则当前一项与日期数据之间间隔超过一个空格时有可能导致日期读入时对不准位置。如果数据是按列对齐的,还可以在日期变量前加上“开始列号”说明日期变量开始读取的位置,比如:data b;-自由格式:空格数量无影响,非自由格式(有格式符号等,)空格数量有影响,甚至没有空格也没关系,这里sales和date要有空格,否则区分不了了,但是date在前面的话,可以不要空格,只要留10个位置给date input sales 15 date yymmdd10. ;-如果没有15,yymmdd10.取的是前一列空格后的10个位置 format date yymmdd10.; put date=; cards;1100 56-6-131200 67.12.15;run;数据中日期是从第15列开始的。如果在上面去掉“15”,则读入的DATE变量为缺失值。但是如果把日期值与前一个数据值只隔开一个空格则可以用自由格式。有格式读取还可以与自由格式结合起来使用,在INPUT语句中指定变量名 : 格式 表示按位置读取当前第一个非空列开始的值并用指定的输入格式转换,比如,中间有日期又没有对齐时就可以用下例这样的方法读取:data b; input sales date : yymmdd10. ;-没有冒号就是从第一列的空格之后数10个位置 format date yymmdd10.; put date=; cards;1100 56-6-131200 67.12.15;run;INPUT语句有十分复杂的使用方法,可以处理几乎是任意复杂的数据输入问题,这里我们就不详细讲了,有兴趣的读者可以参考SAS系统Base SAS软件使用手册。Put语句SAS数据步的输出一般是数据集,用赋值语句计算的结果会自动写入数据集。SAS也提供了一个PUT语句,可以象其它语言程序的PRINT、WRITE(*,*)、printf等语句一样立即打印输出结果。PUT语句在关键字后面列出要输出的各项,每一项可以是变量名或字符串,不能为数值常量或表达式,各项之间用空格分开。PUT语句的输出结果显示在LOG窗口。例如:data; x=0.5; y=sin(x); put Sine function value of x is y;run;结果将在运行记录窗口显示一行 Sine function value of 0.5 is 0.4794255386另外,在PUT语句中使用“变量名”来指定输出项可以显示带有变量名的输出结果,比如把上程序中的PUT语句改为 put x= y=;则结果在LOG窗口显示为 X=0.5 Y=0.4794255386PUT语句的输出项还可以指定具体列位置,比如,下面的PUT语句指定把X数值显示在第1020列,把Y数值显示在第3040列,并保留6位小数:put x 10-20.6 y 30-40.6;在指定的列位置内,数值型数据靠右对齐,字符型数据靠左对齐。要保留的小数位数写在一个小数点后面,如果变量为整数值或者字符型则不必指定小数位数。PUT语句还可以使用类似C、FORTRAN语言的“域宽.精度”方式指定输出的宽度和精度,例如,put x 20.8 y 20.8;使X占用第120列,8位小数,右对齐;Y占用第2140列,8位小数,右对齐。其中20.8 是多种SAS输出格式中最常见的一种,用于输出数值型数据,小数点前面为输出宽度,小数点后面为输出精度(小数位数)。对于字符型变量,要指定其输出宽度可以用“$宽度.”的格式,如“$10.”指定字符型变量输出宽度为10位。输出占不满指定宽度时,数值型数据向右对齐,字符型数据向左对齐。字符型常量可以用于PUT语句中,但不能规定占用的列位置或者宽度。如果希望PUT语句的输出不产生换行,使下一个PUT的结果可以显示在同一行,只要在PUT 语句结尾处加一个符,如:put i ;PUT语句的输出结果缺省情况下被送到运行记录窗口。在PUT语句之前用FILE语句可以改变PUT语句的输出目的地。比如,在PUT语句之前用file print;可以把PUT语句的输出转向到输出窗口。在FILE语句中指定一个包含文件名的字符串可以把PUT语句的输出转向到此文件中。比如file tmp.out;把后续的PUT语句输出转向到当前工作目录下的文件“tmp.out”中,生成输出文件tmp.out 。注意当前工作目录在SAS状态栏的右方显示,双击可以更改。文件名也可以指定全路径,比如“C:SASTMP.OUT”。INPUT 一般形式为:INPUT(源数据,输入格式)PUT它的一般形式为:PUT(源数据,输出格式)Input:字符转化为数字、文本;输入格式类型为函数返回值一样,函数返回的不确定Put:数字、字符转换为字符;输出格式的类型必须和源数据一致?但是函数返回值却是字符都是:数据格式都是和数据存储的格式一样? Format、informat也一样?暂时的理解是:formats函数和外部的函数一致总结完成后,看看这里面的两个函数的用法是否匹配?和format、informat相关与区别:疑问:put有函数、语句有什么区别?data e;x=20130909;y=put(x,dollar12.);/*yyyymmdd.*/-字符到字符可以,字符到货币为什么不可以run;data e;x=20130909;y=put(x,12.);-数字到数字为什么不可以run;data e;x=20130909;y=put(x,12.);-字符元数据,格式却是数值?run;SAS数据集里面的数据是不是sas存储的数据形式Input数据明明是12-09-12,为什么存储的格式还是数字型?我们的sas里面存储的是数值和字符两种格式?我只是告诉sas我输入的是日期,没说存储的是日期格式? Sas没有存储的日期格式Print 与put与print不同的地方是“ put结果在log窗口上,print的结果在结果查看器里面看的定义变量赋值变量 明确地说明 input 语句 在首次出现时给出定义 赋值语句:等号 =含义为把右边SAS表达式的值赋给左边的变量,左右位置不能颠倒。左边的变量可以是新变量,也可以是旧变量。如果是旧变量,那就是给这变量改值。右边的表达式是常量与旧变量经过SAS运算和SAS函数作用所成的式子。如果右边有字符型常量值,必需用引号把它括起来。若是日期、时间或日期时间型常量应把其值用引号括起,并再后面加字母D、T或DT。例如01jan2000d,19:30:15t,18oct2002 9:05:26dt等。定义变量:input语句增加变量的方法:赋值语句:Variable=表达式;(变量=表达式)表达式中可以包含SAS操作符和函数.SAS操作符用来执行基本的计算;SAS函数的一般形式: 函数名(参数1,参数2,); (参数之间以逗号隔开,可以可以是常量、变量、表达式或其它函数)疑问: 为什么赋值新变量 后旧的变量不见了? 只有在set,input语句后面才新添加变量?答: 因为data关键字就是建立新的变量,所以数据集清空了FORMATS1、什么是SAS FORMATS?SAS的数据类型虽然只有数字(numeric)和字符(character)两种,但是这并不妨碍SAS展示其在数据的读取、转换和展示上的高效、强大和灵活。我想原因之一,就是因为有了SAS FORMATS。什么是SAS FORMATS?简言而之,就是SAS在读取或展示数据时的一些指令。更直白的说,就是SAS用来读取和展示数据的一些规则。话说到此,我们也许会有疑问,平时读取和展示数据时,好像也没用到SAS FORMATS?例如数据集test1,在读取时并没有指定什么格式,也没碰到什么麻烦,但How about数据集test2呢?datatest1;inputpid $price;datalines;p001 2239.5p002 456p003 231.4567;run;datatest2;inputpid $ price;datalines;d1 p001$2,239.5d1 p002$456d1 p003$231.4567;run;其实SAS在读取或展示数据时,都要按照一定的FORMATS来进行。只是不过如果是标准的数字型(如不带货币符号,千分位号等)和标准的字符型(如字符中间不嵌空格等),SAS可以按默认的FORMATS来读取,而不必具体指定。如若不是,则需具体指定。如数据集test2,数字、字符均非“标准”的,故需另外指定读入格式。datatest2;inputpid $ & pricedollar9.2;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025春季黑龙江哈尔滨市木兰县“丁香人才周”事业单位引才招聘76人考前自测高频考点模拟试题附答案详解(模拟题)
- 2025年智能眼镜的智能家居控制
- 2025年智能音箱的用户行为分析
- 2025河南航空港投资集团有限公司25人招聘模拟试卷及答案详解(夺冠)
- 2025河北保定市雄安新区雄县事业单位招聘89人模拟试卷及参考答案详解1套
- 2025年春季中国邮政储蓄银行内蒙古分行校园招聘模拟试卷附答案详解(典型题)
- 2025河南新乡市延津县县外在编在岗教师回乡任教的考前自测高频考点模拟试题完整答案详解
- 2025内蒙古阿拉善盟沪蒙能源集团有限公司招聘33人考前自测高频考点模拟试题完整参考答案详解
- 2025贵州六枝特区科学技术协会招聘公益性岗位人员1人考前自测高频考点模拟试题及答案详解(有一套)
- 2025广东广州航海学院广州交通大学(筹)招聘高层次人才(学科领军人才)15人模拟试卷附答案详解
- 水刷石外墙清洗方案
- (正式版)YST 1682-2024 镁冶炼行业绿色工厂评价要求
- 体育健康知识教案课件
- 卡西欧dh800电吹管说明书
- 分数的初步认识公开课一等奖市赛课一等奖课件
- 体育课免修申请书体育课免修申请书八篇
- 【超星尔雅学习通】商法的思维网课章节答案
- 509册泵类书籍大全-截止到20150531
- GB/T 5796.3-2022梯形螺纹第3部分:基本尺寸
- GA 576-2018防尾随联动互锁安全门通用技术条件
- 工厂化育苗基质与营养
评论
0/150
提交评论