导入本地文件夹?
通过ODBC
i. 直接指定位置
libname mydata 'c:\my documents\sasfiles';
ii. 其他方式(包含从数据库导入)
dataweight_club;
input IdNumber Name $ 6-20 Team $ 22-27StartWeight EndWeight;
datalines;
1023David Shaw red 189 165
1049Amelia Serrano yellow 145 124
1219Alan Nance red 210 192
1246Ravi Sinha yellow 194 177
1078Ashley McKnight red 127 118
1221Jim Brown yellow 220 .
;
run;
dataperson;
infile datalines delimiter=',';
input name $ dept $;
datalines;
John,Sales
Mary,Acctng
2、利用SAS的import过程导入诸如Excel等外部数据文件或者数据库表?
3、利用data步中的infile语句导入普通文本数据文件。
Data步的两种:
b) Observations (类似records,rows)
c) Variables (类似columns)
d) 在raw data file里,rows: records columns: fields
编译->初始化->input(引入) set(已有)->run / output 运行/导出
逐行(record)操作
;
e) _n_ , _last_ , _error_, end,in, Point,_iorc_ 其他
f) Firstobs , Nobs, Obs 返回行数(第一条的行数,obs总数,最后一条的行数)
g) _numeric_, _character_ , _all_ 返回变量(所有数值,所有字符,所有)
h) First.变量名 , Last.变量名 用by分组,同组第一个ob(如果是,取1,否则取0)和最后一个ob(如果是,取1,否则取0)
i) [待验证] SAS似乎没有bool变量,数值变量0-1取值可作为bool使用
例如:if last.变量名;
•drop语句:删除字段
Datab;
Seta(drop=x);
Run;
•rename语句:重命名字段
Datab;
Seta(rename=(x=x1));
Run;
•keep语句:保留字段
Datab;
Seta(keep=x y);
Run;
•label语句:标签语句
Datab;
Seta;
Labelx=’the value of x’
Run;
•by语句:规定分组变量
Data b;
Set a;
By x y;
Run;
后面可以对last.变量名 first.变量名 last.变量名 进行操作
•class语句:
•set语句:纵向合并数据集
Data b;
Set a1 a2;
Run;
Point
NOBS
END
•merge语句:横向合并数据集
Data b;
Set a1 a2;
Run;
•update语句:更新数据集合
Data b;
Update master_a transaction_a;
by 变量名;
updatemode=missingcheck/nomissingcheck
•modify语句:更新数据集 delete语句:删除数据集
Data b;
Modify master_a transaction_a;
Updatemode=missingcheck/nomissingcheck
By variable;
Run;
•stop语句:停止指针继续进行
相当于跳出循环break
•where语句:条件语句
Datab;
Seta;
Wherecondition;
Run;
支持: between and
Contains
Is null / is missing
Like
Same … and …
Wherefirst_condition;
Wheresame and second_condition;
(当然也可以正常携程wherefirst_ and second_condition)
Min/ Max
•output语句:输出到文件
不写默认全部输出,显式指定才会按照条件输出
•missing语句:判断是否缺失
data example;
input x1 x2;
if missing(x2) then delete;
cards;
1 2
. 9
3 .
6 .n
;
run;
proc print;
run;
•retain语句:保留变量
•do循环语句:
Do / do while/ do until do i=1 to 10 by 2
•if条件语句:
•Length:规定字符长度
•attrib语句
Put 语句:
Select /when语句:类似case when
select;
when(grade='A') salary=x*1.5;
when(grade='B1'|grade='B2'|grade='B3') salary=x*1.3;
when(grade='C') salary=x*1.1; otherwise salary=x; end;
array语句
显示下标
隐藏下标
abs()---绝对值; mod (x,y) ---取模; sign (x) ---符号函数;
max()---最大值; min () ---最小值; sqrt (x) ---平方根;
sum()---求和; mean () ---平均值; exp (x) ---指数值;
log()---e为底对数值;log10 (x) ---绝对值;sin (x)—正弦
•1.2.2 样本统计函数:
Mean(of x1-xn)—平均值
N(of x1-xn)非缺失数据个数
Nmiss (of x1-xn)缺失数据个数
Sum()—求和; var()--方差;std()--标准差;
cv()--变异系数
Range( of x1-xn )--极差
Day() 返回某月的第几日
HOUR(time|datetime) 返回当前小时数
Minute(time|datetime)返回当前分钟数
second(time|datetime)返回当前秒数
yrdif(sdate,edate,basis)返回两个日期之间的年数
datdif(sdate,edate,basis)返回两个日期之间的天数
Intck(‘year|month|day’,from,to)返回指定刻度时间间隔
Intnx(‘year|month|day’,from,increment)给定间隔推算日期、时间
Datepart(datetime)返回日期时间值的日期部分
Timepart(datetime)返回日期时间值的时间部分
Mdy(month,day,year) 返回由年月日组成的日期值
Yyq(year,quarter)返回由年和季组成的日期值
DHMS(date,hour,minute,second)返回日期时间值
HMS(,hour,minute,second)返回时间值
trim(s)
返回去掉字符串s的尾随空格的
upcase(s)
把字符串s中所有小写字母转换为大写字母
upcase(abc)=ABC
lowcase(s)
把字符串s中所有大写字母转换为小写字母
lowcase(PINGAN)=pingan
index(s,s1)
查找s1在s中出现的第一个位置
index(‘pingan’,’a’) =5
repeat(s,n)
字符表达式s重复n次。
repeat(‘haha’,2) =hahaha
SUBSTR(s,p,n)
从字符串s中的第p个字符开始抽取n个字符
substr(pingan001,5,5)=an001
compress(b,aa)
清洗或者保留b中的 aa字符
compress(adadef,a) =ddef
coalesce(‘a’,’b’,……)
返回第一个不为空的数
z = COALESCE(., 7, ., ., 42)=7
length(a)
字符a 的长度
length(‘insurance)=9
tranwrd(s,s1,s2)
从字符串s中把所有字符串s1替换成字符串s2后的结果
tranwrd(‘haoren’’,hao’,’huai’) =huairen
19
PROC 过程名 <选项>;
QUIT;
语句:
VAR :规定分析的变量名
MODEL 规定因变量和自变量
ID 规定????
WHERE where表达式
CLASS :规定分类变量(这个比by 更像sql里的groupby)
BY :在data step和proc step里面不一样的用途?
OUTPUT: 目标数据集名字
QUIT: 结束?
FORMAT语句: 调整格式
INFORMAT 对input的变量进行进一步format?(输入)
对输出的FORMAT
其他:
TITLE 语句
FOOTNOTE语句
LIBNAME 导入
输入格式: input $w $CHARw
$w
$CHARw
输出格式: FORMAT
输出数值
w.d
BESTw.
Ew.
输出字符:
$w
日期时间存储方式:
INPUT 输入格式
DISTINCT
AS
CALCULATED (引用一个经过计算的变量时,必须在前注明CALCULATED)
CASE WHEN
ORDER BY
BETWEEN
IN
LIKE =>like用的正则表达式规则?
GROUP BY
HAVING
插入行:
INSERT INTO tablename
VALUES ()
QUIT;
DELETE 行
DROP 列
ALTER TABLE tablename
MODIFY ….
ADD ….
PROC SORT 排序
BY
PROC APPEND base-datasetdata-dataset<(where=cond1)> 连接两个dataset
PROC MEANS
PROC CORR
BY var1 var2
PROC FREQ
PROC FORMAT
也可以进行某种dict映射
PROCFORMAT
Valuexxx 1=
2=
3=
(python里的dict映射)
定义好了可以在tabulate里面使用format 语句调用这个格式
PROC TABULATE
声明 1. %let name= value
2.SYMPUT : CALL SYMPUT(macro_name,value)
3. PROC SQL;
SELECT xxx
INTO: macro_name
FROM tablename
QUIT;
%put macro_name *会将macro_name这个宏变量打到日志上
调用 1. e.g DATA A;
SET ¯o_name;
RUN;
声明:
%macro macroname
内容
%mend macroname
调用:
%macro_name
参数
宏程序设计语句及用途
语句
用途
%Do %to
条件处理至一个匹配的%END语句
%Do%Until
重复循环直到条件为真
%End
结束%DO组
%Global
创建全局宏变量
%If-%Then/%Else
有条件执行宏
%Let
创建宏变量
%Macro-Name
调用宏
%Macro
定义宏
%Mend
结束宏定义
•宏计算函数
函数名
说明
%Eval
计算算术和逻辑表达式整数格式
%SYSEVALF
计算算术和逻辑表达式浮点格式
132
格式:
PROC 过程名 DATA=输入数据集 选项;
过程语句/选项;
过程语句/选项;
RUN;
PROC常用结构
1. VAR
指定分析变量
2. MODEL
指定模型形式
3. BY
(groupby)
CLASS
4. OUTPUT
5. FREQ / WEIGHT
6. ID (为了不适用obs来作为序号,指定一个name列作为序号)
7. WHERE
where condition
8. LABEL 做图表的时候常用,为某列起别名
9. FORMAT
e.g.
proc printdata=sasuser.c9501; format math 5.1 chinese 5.1;
run;
常用PROC过程步
1. PROC PRINT
PROC PRINT data=sasuser.asd;
Var name,Chinese,gender
run;
2.
Put语句