SAS 中最常用的一些功能(一)
编程语言是技能,其中有一些部分掌握了之后,就更容易有了一个基本的框架,再去学习其它的知识和功能就更轻松一些。有一个很常见的比喻是:编程学习是拼图,拼图中比较重要的是先拼出整个图的框架,之后每一块的位置才能够明确的定位,进而形成一个完整的图案。
下面提到的这些功能或者知识点,就可以理解成我在学习过程中的第一个框架。
1. Keep 和 Drop
使用这两个命令来选择想要保留或者舍弃的变量。
在Data Step中,DROP variable-list
可以删除变量,类似的,使用KEEP variable-list
来保留变量。举例:
Data Test;
Set work.name;
Drop Full_name Gender;
Run;
Test这个数据集将保存work.name这个数据集的所有行,但是舍弃掉Full_name和Gender这两个变量。
Keep和Drop也可以作为Option使用。 在Data和Set命令中都可以应用:DATA output-SAS-Data-set (DROP = variable-list);
或 SET input-SAS-data-set (KEEP = variable-list);
来实现对于变量的取舍,比如:
Data Test(Drop = Full_name Gender);
Set work.name;
Run;
Data Test;
Set work.name (Drop = Full_name Gender);
Run;
上面两个Data Step 将会和第一个同样的结果。
2. 导入数据
导入数据有几种方法,可以使用INFILE
命令,也可以使用Proc Import
。
使用INFILE命令
INFILE '<external-file>' DLM=',' <Options>
- 如果数据是外部文件的话,那么exernal-file就是外部文件的路径
-
DLM
是分隔符,也就是数据使用什么作为分隔的,比如可以指定DLM='|'
- Option中可以使用
DSD
,作用是- 把分隔符设定为‘,’;
- 如果有两个连续逗号,保留一个空值;
- 如果数值有引号,移除;
-
MISSOVER
的作用是如果数据不能填满一行的话,则全部计为空置; -
FIRSTOBS=n
可以告诉SAS从哪一行开始读取数据;
在INFILE之后,还要使用Format和Informat命令来设定数据的Format和Informat,使用Input的命令区分数据的类型,是字符型还是数字型。
例子:
Data Test;
NFILE "C:\User\Admin\Desktop\Learing\Sample.csv" DLM=',' DSD MISSOVER FIRSTOBS=2 LRECL=32760;
FORMAT Personal_id $6.
Gender $1.
Account Best12.;
INFORMAT Personal_id $6.
Gender $1.
Account Best12.;
Input Personal_id $
Gender $
Account ;
Run;
导入路径下的一个csv文件,有三个变量,其中Personal_id和Gender是字符型变量,Account是数字型变量。
使用Proc Import
这个命令更多用于EXCEL文件的导入,直接看例子:
Proc Import DATAFILE = "C:\User\Admin\Desktop\Learing\Sample.xlsx"
OUT = DATA
DBMS = EXCEL REPLACE;
SHEET = "SHEET1$";
GETNAMES=YES;
SCANTEXT=YES;
Run;
-
DATAFILE
后面接文件的路径 -
OUT
后面写导入的数据集的名称 -
DBMS
指导入的引擎,如果是EXCEL文件,则写EXCEL REPLACE
-
SHEET
顾名思义,导入的Sheet的名字,注意名字后面要加一个$ -
GETNAMES
是是否从第一列从读取变量名称; -
SCANTEXT
设置是否扫描整列,并选取最长的字节为变量的length -
RANGE
例子中没写,这里提一下RANGE='SHEET1$A1:I12';
可以实现只导入Excel文件特定的列;
3. 一些常用Functions
一些具体的用法不再赘述
字符处理类:
-
SCAN()
提取单词 -
SUBSTR()
提取字符 -
UPCASE()
大写 -
PROPCASE()
首字母大写 -
LENGTH
设定长度 -
CATX()
连接字符 -
INPUT()
字符型转成数字型 -
PUT()
数字型转成字符型
时间类
-
Year()
提取年 -
QTR()
提取季度 -
Month()
提取月 -
Day()
提取日 -
Weekday()
提取周几 -
today()
今天日期值 -
mdy(m,d,y)
某一天的日期值
计算类
-
Sum()
求和 -
MEAN()
求均值 -
MEDIAN()
求中位数 -
SQRT()
开平方根 -
ABS()
求绝对值 -
MAX()
最大值 -
LOG()
对数 -
EXP()
指数