《SAS编程与数据挖掘商业案例》学习笔记之十三

本次重点:data步循环与控制

涉及:if/then/else语句,select语句,do语句,continue语句,leave语句

1.if then else 语句

高效率的if应用:

1)

If  x=1 then y=1;

Else if x=2  then y=2;

Else y=3;

对于每一个数据集的观测,if-then-else只会判断一次,为真则执行

2)

If status=1 then

If status=5 then

If status=9 then output;

高效率:包含一个序列if-then语句,只要其中有一个if为假,则程序将不再执行下面的if语句

If status=1 and status=5
andstatus=9 then output;则无效率,需要判断所有的条件

3)

If status in (1,5,8,9) then newstat="single";

Else  newstat=‘not single‘

高效率:对于在in算符里面的表达式,只要有一个为真,则sas就执行后面的语句

如果用or语句的形式,则需要判断所有的条件是否为真,效率则低

2.select语句

libname chapt6 ‘f:\data_model\book_data\chapt6‘;

data fishdata4;

set chapt6.fishlength(keep=location date _name_ measurement);

by location date;

array tr[1:4] length1-length4;

retain length1-length4;

if first.date then do i=1 to 4;

tr(i)=0;

end;

select(_name_);

when (‘length1‘) length1=measurement;

when (‘length2‘) length2=measurement;

when (‘length3‘) length3=measurement;

when (‘length4‘) length4=measurement;

otherwise;

end;

if last.date;

keep location date length1-length4;

run;

拉直数据,相当于行转列;

中间黄色部分也可以用select的另一种方式:

select;

when (_name_=‘length1‘)
length1=measurement;

when (_name_=‘length2‘)
length2=measurement;

when (_name_=‘length3‘)
length3=measurement;

when (_name_=‘length4‘)
length4=measurement;

otherwise;

end;

3.do语句

1) do组语句

Do;

执行程序块;

end;

常用于和if then/else语句中

2)do循环语句

Do   i=1 to 10;

Do  i=1 to exit;

Do i=1 to n-1;

Do i=1 to 100 by 10; --规定步长

Do i=1 to 20 by 2 until (x>y);   --每次循环后被计算

Do i=10 to 0 by -1 while(month=‘JAN‘);  --每次循环前计算

3)do
while语句  循环前判断条件

n=0;

Do while (n<5);

Put n=;

n 1;

End;

4)do until 语句  在循环后计算,故循环至少被执行一次

n=0;

Do until(n>=5);

Put n=;

n 1;

End;

商业实战;

libname ch7 ‘f:\data_model\book_data\chapt7‘;

proc sort data=ch7.smooth;by cid month;run;

data smooth;

set ch7.smooth;

by cid;

array lags(12);

lags(1)=lag(balance);

do i=2 to 12;

lags(i)=lag(lags(i-1));

end;

do j=12 to 2 by -1;

if j gt cns then lags(j)=.;

put j=;

end;

if first.cid then do

cns=0;

do i=1 to 12;lags(i)=.;

end;

end;

cns 1;

mean6=mean(of lags1-lags6);

mean12=mean(of lags1 - lags12);

run;

计算每个客户在每个月前6个月和前12个月移动平均余额;

4.控制语句

continue语句和leave语句

data a;

do i=1 to 20;

sumx i;

if sumx le 15 then continue;

output;

end;run;

当sumx<15时跳出本次循环,因而最后返回的是最后的15条数据

data a;

do i=1 to 10;

sumx i;

if sumx gt 15 then leave;

output;

end;

run;

当sumx大于15时,结束循环,故只输出前5条数据

注:

continue停止当前循环继续下一次循环;

leave跳出当前循环,执行下一个sas语句;

continue值能在do循环中;

leave语句可以同do循环活select语句共同使用。

时间: 2024-12-24 22:31:49

《SAS编程与数据挖掘商业案例》学习笔记之十三的相关文章

《SAS编程和数据挖掘商业案例》学习笔记# 19

继续<SAS编程与数据挖掘商业案例>学习笔记,本文側重数据处理实践.包含:HASH对象.自己定义format.以及功能强大的正則表達式 一:HASH对象 Hash对象又称散列表,是依据关键码值而直接进行訪问的数据结构.是依据关键码值而直接进行訪问的数据结构. sas提供了两个类来处理哈希表.用于存储数据的hash和用于遍历的hiter,hash类提供了查找.加入.改动.删除等方法,hiter提供了用于定位和遍历的first.next等方法. 长处:键值的查找是在内存中进行的,有利于提高性能:

《SAS编程与数据挖掘商业案例》学习笔记之十九

继续<SAS编程与数据挖掘商业案例>学习笔记,本文侧重数据处理实践,包括:HASH对象.自定义format.以及功能强大的正则表达式 一:HASH对象 Hash对象又称散列表,是根据关键码值而直接进行访问的数据结构,是根据关键码值而直接进行访问的数据结构, sas提供了两个类来处理哈希表,用于存储数据的hash和用于遍历的hiter,hash类提供了查找.添加.修改.删除等方法,hiter提供了用于定位和遍历的first.next等方法. 优点:键值的查找是在内存中进行的,有利于提高性能: h

《SAS编程与数据挖掘商业案例》学习笔记之十六

<SAS编程与数据挖掘商业案例>学习笔记,本次重点:sas宏变量 内容包含:宏变量.宏函数.宏參数.通配函数.字符函数.计算函数.引用函数.宏语句.宏应用 1.宏触发器: %name-token:是一个宏语句或宏函数 &name-token:是一个宏变量引用 宏变量不依赖于sas数据集,能够在不论什么一个除数据行以外的地方定义和引用宏变量,一般定义的宏变量为局部变量,除非使用%global,定义宏变量用%let,显示宏变量用%put,调用宏变量用&. eg: %let a=xx

《SAS编程与数据挖掘商业案例》学习笔记之十五

继续<SAS编程与数据挖掘商业案例>读书笔记,本次重点:输出控制 主要内容包括:log窗口输出控制.output窗口输出控制.ods输出控制 1.log窗口输出控制 将日志输出到外部文件 proc printto log= "f:\data_model\book_data\chapt9\newlog.txt"; new; proc print data=sashelp.class; proc printto;run; 2.output窗口输出控制 输出sas数据集到外部文件

《SAS编程与数据挖掘商业案例》学习笔记之十八

接着以前的<SAS编程与数据挖掘商业案例>,之前全是sas的基础知识,现在开始进入数据挖掘方面笔记,本文主要介绍数据挖掘基本流程以及应用方向,并以logistic回归为例说明. 一:数据挖掘综述 衡量一个数据挖掘模型价值的唯一标准就是商业目标,为达到一个商业目标,有很多种方法,只有高效解决商业目标的方法才是最牛的方法,即使是看似简单的方法,只要能高效解决商业目标,我们就认为是牛的方法: 面对海量的数据,即使是使用了最先进的工具,最复杂的算法,但是如果挖掘出来的知识是无用的,或者挖掘的结果是无法

《SAS编程与数据挖掘商业案例》学习笔记之十

继续之前的读书笔记,本次讲解sas主要的变量操作,包括基本赋值语句.累加语句.keep语句.retain语句.array语句.rename语句.length语句. 1.基本赋值语句 z=x y; z=sum(x,y);  sum函数的好处是可以克服缺失值的影响: 2.如果表达式中既有数值型变量又有字符型变量的话,则会将字符型变量转化为数值型变量 3.系统在编译阶段,对于赋值语句变量,如果是字符型变量则长度为1,如果是数值型变量则长度为8,接下来,系统将执行赋值语句,这时变量长度将由第一次读入的表

《SAS编程与数据挖掘商业案例》学习笔记之十七

继续读书笔记,本次重点sas sql语句,由于sql内容多且复杂,本文只介绍商业应用中常用的并且容易出错的地方,内容包括:单表操作.多表关联.子查询以及merge和join的区别 1.单表操作 eg1: Proc sql outobs=10: *可选项,功能类似于data步中的obs数据集选项 create table class as Select  name, case when sex eq 'M' then "1" when sex eq 'F'  then "2&q

《SAS编程与数据挖掘商业案例》学习笔记之十一

继续读书笔记,本文重点側重sas观測值的操作方面, 主要包含:输出观測值.更新观測值.删除观測值.停止输出观測值等 1.output语句   输出当前在pdv中的观測值,继续无条件运行以下的语句. 注意:简单的data步不须要output语句.run语句会自己主动输出pdv中的数据到数据集,并返回data步开头继续运行下一条观測. 在有output语句和run语句同一时候存在时.pdv仅仅会运行output的结果到正在被创建的数据集.而运行run语句的结果是pdv会清空全部的变量值为缺失值 da

《SAS编程与数据挖掘商业案例》学习笔记之八

十:file语句 file中的option选项: Dlm=              指定列表输出文件的分隔符,默认是空格 Dropover      规定当输出数据行长度超过指定值时,忽略超出部分 Flowover    规定当输出数据行长度超过指定值时,超过部分在下一行输出 Dsd   规定一个数据项可以包含分隔符,但是要用引号括住  默认分隔符是逗号 Encoding=  指定输出外部文件所用编码 Filename=   定义一个临时变量,用于接收put语句打开的文件名,默认长度为8 Fi