编程语言是技能,其中有一些部分掌握了之后,就更容易有了一个基本的框架,再去学习其它的知识和功能就更轻松一些。有一个很常见的比喻是:编程学习是拼图,拼图中比较重要的是先拼出整个图的框架,之后每一块的位置才能够明确的定位,进而形成一个完整的图案。
下面提到的这些功能或者知识点,就可以理解成我在学习过程中的第一个框架。
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()指数