SAS

逻辑库

导入逻辑库:

导入本地文件夹?

通过ODBC

 

                        i.             直接指定位置

     libname mydata 'c:\my documents\sasfiles';
 

                      ii.             其他方式(包含从数据库导入)

 

导入数据集:

直接在data步中输入

一种方式:datalines 用空格分隔

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、利用SASimport过程导入诸如Excel等外部数据文件或者数据库表?

3、利用data步中的infile语句导入普通文本数据文件。

 

Data步的两种:

SAS Data Set的结构:

b)        Observations (类似records,rows)

c)        Variables (类似columns)

d)        在raw data file里,rows: records columns: fields

Data step  

编译->初始化->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<end=variable>;

         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语句

         显示下标

         隐藏下标

 

SAS数据类型:数值(浮点),字符$

类型转换部分

数学函数:

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 )--极差

Datetime 函数

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 step

通用格式

 

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 输入格式

 

 

PROC SQL

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

<FORCE>

 

 

数据统计(EDA)

PROC MEANS

 

PROC CORR

BY var1 var2

 

PROC FREQ

 

PROC FORMAT

也可以进行某种dict映射

         PROCFORMAT

         Valuexxx 1=

                            2=

                            3=

                            (python里的dict映射)

定义好了可以在tabulate里面使用format 语句调用这个格式

 

 

PROC TABULATE

 

 

SAS MACRO

宏变量

         声明 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 &macro_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语句

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值