在其他编程语言中,有各种各样的数据类型,但是总体上,可大致分为:数值型,字符型和日期型,而SAS中的数据类型,只有2中数据类型:
字符型和数值型
。在这里,你会发现,日期型的去哪了?在SAS程序中,日期默认是作为数值型的,所有的日期类型的变量都会被作为输入日期与1960年1月1日之差。例如今天是20191208,它显示的就是21891(这个数字哪来的,你猜猜?),如果你想显示成日期型,那么你得设定相应的日期格式。这个怎么个相应的日期格式,就是咱们下面讲的格式化。
SAS变量的输入格式
输入格式:
input 变量1 输入格式1 变量2 输入格式2 ...;
1.数值型的输入格式
数值型的数据格式主要是w.d。其中w表示数值的总位数或者说宽度(包括小数点),d表示数值的小数部分的位数,如6.2表示:数据宽度是6,2位小数点,整数位是4。2. 表示总位数是2,没有小数点。
由左边图显示:咱们输入性别代码,1和2,理论上应该都是整数,但是你加了小数位数,有2位小数,但是实际上没有,SAS会把自己默认降为小数,并且满足2位小数的宽度。你看这就和你想要的数据不一样了
所以,在做程序设计的时候,一定要设置好,数据格式。
练一练:看看下面的例子,看看是否跟你想象中要展示的数据是否一样?
2.字符串输入格式
字符串变量的输入格式是$ w. 其中$符号是必须加的,w表示字节数,一个中文占2个字节,SAS的默认宽度是8,如果超过8位,需要加上宽度值,以保证能够全部读上,否则就只会读8位,多余的截掉,以下示例:
看到无论是数值型,还是字符型,貌似宽度后面都有.,这个“.”,是必须加的,只要有宽度值,就必须加".",否则,让你看一下结果:
3.日期型输入格式
日期型输入格式有很多,下面列表展示了几种输入格式,其中w是表示日期的宽度,注意:这个宽度不能超过32
格式
|
范围
|
示例
|
输入格式
|
YYMMDDw.
|
6~32
|
20191208
|
YYMMDD8.
|
2019/12/08
|
YYMMDD10.
|
MMDDYYw.
|
6~32
|
120819
|
MMDDYY6.
|
12082019
|
MMDDYY8.
|
DDMMYYw.
|
6~32
|
081219
|
DDMMYY6.
|
08122019
|
DDMMYY8.
|
DATEw.
|
7~32
|
08DEC19
|
DATE7.
|
08DEC2019
|
DATE9.
|
MONYY7.
|
5~32
|
DEC19
|
MONYY5.
|
DEC2019
|
MONYY7.
|
补充:特殊输入符: ":" 和 "&"
1.冒号(:)的作用
先看下面的例子
这个结果怎么跟我想象中的不太一样,在SAS程序中,默认情况下:每个变量之间,不是有空格隔开了吗?我这也隔开了,怎么显示的数据这样?
曰:
SAS的默认,是默认不指定宽度,如果你指定了宽度,那么SAS就再也不是以默认的空格作为变量区分的标志了,而是按照指定的宽度来识别变量
,例如:你对city这个变量指定了18,那么程序就会从头开始读取,直到18位结束才认为city的值,不管中间读到了什么,它都认为是city的值。这个时候冒号的作用就出来了,
你在变量和输入格式之间加一个冒号,这个冒号就会告诉SAS,读取下一个变量,要么遇到空格,要么变量的宽度读完了
,现在咱们再改一下这个程序,看看结果
2.&的作用
请先看一个示例:
友友们,可以看一下,如果咱们的数据有空格怎么办?在SAS程序中,一般空格时默认隔开的,但是实际的数据中,我们又想让它显示空格,这个时候,咱们需要&符号来救场,
&符号可以处理空格,并且两个变量之间,必须用双空格,因为变量中有空格,所以现在一个空格无法识别是变量中的,还是默认分割符,所以这个时候需要用2个空格来作为默认分隔符
,否则,可能会出现意想不到的结果,如果你想见识,可以多尝试一下,看看结果。
OK,到这一步,已经把输入格式化梳理完了,其实,简单来说,输入格式化,就是让SAS程序来按照这种格式去读数据,现在我们说一下输出格式化,输出嘛,非常简单,就是展示给别人看的。
SAS变量的输出格式化
输出格式使用format语句来定义的.在input format 变量1 格式1 变量2 格式2 ...
数值型的输出格式
数值型的输出格式有很多,其实,大体可分为三种:w.d、commaw.d和percentw.d
w.d的含义与输入格式中的w.d一样,commaw.d的作用是将数字的整数部分自右向左 每三位用逗号隔开,就是excel表格中千分位展示的那种类型。percentw.d的作用是将数据显示百分比的形式,它自动将变量乘以100,并加上%,看下面的一个示例:
由以上解释:
整型:sqnum这个是整型,宽度是5,实际数据都是3,所以都能完全展示
千分位:amt 宽度是7,小数点1位,千分位展示,可以看10000和15000,在amt中,数字加小数点的位数都已经7位了,所以千分位的逗号都没有展示出来,9000,长度短,所以千分位展示,可以比对amt1,所以如果要设定千分位展示时,想要把逗号都展示出来,必须考虑逗号,否则,可能还是按照原格式展示的
百分号:在rate的结果中,可以看出,%占了3个字节,长度不够时,会舍去数字,它跟千分位commaw.d不一样,千分位长度不够时,会舍去逗号,这两个要注意。
字符型输出格式
对于字符串变量来说,只要把变量正确的读取进来,则会一模一样的显示出来,所以在字符型中,无须设定输出格式。如果不设定的话,SAS的默认字符串长度是8.
日期型输出格式
日期型的输出格式和输入格式是一样的,不过输出格式可以在宽度值前面家伙是哪个一个字母,以区分各种显示形式。如下图所示:
字母
|
输出格式
|
显示
|
s(/)
|
YYMMDDs8.
|
19/12/08
|
d(-)
|
YYMMDDd8.
|
19-12-08
|
p(.)
|
YYMMDDp8.
|
19.12.08
|
c(:)
|
YYMMDDc8.
|
19:12:08
|
b(空格)
|
YYMMDDb8.
|
19 12 08
|
n(无)
|
YYMMDDn8.
|
20191208
|
在了解到输入格式和输出格式之后,有人会说,这两者在展示上,是一样的,那它们是不是一样的?在这里,我想说:它们实际上是不一样的,输入格式会改变变量的本身值,但是输出不会改变变量本身的值。请看下面的示例:
x设定了输出格式,长度是2,所以展示是2,但是它实际值不变,让它赋给c,所以c的值是zxy, 而y设定了输入格式,长度2,所以展示y的时候,输出也是2,把它赋给d,所以d也是2,即zx
数据类型在其他编程语言中,有各种各样的数据类型,但是总体上,可大致分为:数值型,字符型和日期型,而SAS中的数据类型,只有2中数据类型:字符型和数值型。在这里,你会发现,日期型的去哪了?在SAS程序中,日期默认是作为数值型的,所有的日期类型的变量都会被作为输入日期与1960年1月1日之差。例如今天是20191208,它显示的就是21891(这个数字哪来的,你猜猜?),如果你想显示成日期型,那么...
SAS
数据步的建立离不开input语句,在读入外部数据或cards语句后面的数据块时需要通过input语句定义
变量
。下面介绍input语句定义
变量
的四种方法:
SAS
变量
分为字符型和数值型,字符型
变量
加 $ 符号。
(本文为博主原创,转载必须标明出处:http://www.cnblogs.com/small...
%let NumSamples = 5; /* number of bagging resamples */
/* 2. Generate many bootstrap samples */
proc surveyselect data=credit_...
例如:在
输入
性别时,
输入
1,2,通过自定义格式
SAS
可以自动读成男和女
proc format;
invalue<$> 格式名
变量
值或范围1=
输入
格式1
变量
值或范围2=
输入
格式2......;
value<$> 格式名
变量
值或范围1=
输出
格式1
变量
值或范围2=
输出
格式2......;
picture 模板名 <数值范围>;
value中“
输入
格式1”是字符型要$,
invalue中“
变量
值或者范围”是字符型要 $
DATA Map.engeldat;/*设置数据名称*/
LENGTH location_name $ 33;/*设置该
变量
的字符长度*/
INFILE "C:\Users\Administrator\Desktop\GBD2019.csv" DLM="," ;/*文件路径,csv文件用逗号分隔*/
/*列出
变量
名*/
INPUT location_id location_name $ sex_id sex_name $ age_group_i
SAS
输入
输出
的基本格式很简单:
输入
:INPUT
变量
1
输入
格式1
变量
2
输入
格式2……;
输出
:FORMAT
变量
1
输入
格式1
变量
2
输入
格式2……;
*中间需以空格间隔
输入
格式很简单,但是不同
变量
类型的
输入
格式是不同的 指定
输入
格式会改变
变量
的值,但是指定
输出
格式不会改变
变量
的值,只是改变他们显示的样子
数值型
变量
的
输入
格式
1)例如想让结果展示为23.45%,这里%是占3个字符的,因此y=put(x,percent8.2)
2)例如*.txt文件中的内容为
102012/12/09 outdoor 15%
982101/01/01 golf 7%
901207/02/01 clothes 25%
103009/22/07 shoes 7%
这里要展示为两位小数的结果,则应该
1、
SAS
安装
SAS
的安装比较麻烦,因为网上比较难找到破解版,我花了很大功夫才找到的链接,现在也分享给大家:http://pan.baidu.com/s/1qYHTbkS,链接里有安装教程及安装包,按照上面的教程一步步进行就可以成功安装了。
2、
SAS
语言的基本概念及举例