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

这篇博客详细介绍了SAS编程中的变量操作,包括基本赋值、累加、keep、retain、array、rename和length语句的使用。重点讨论了retain语句在数据汇总、累加、纵向比较和处理缺失值等方面的应用,以及array语句在处理无序变量和横向操作中的功能。此外,还提到了rename和length语句在数据集变量重命名和长度调整中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

继续之前的读书笔记,本次讲解sas主要的变量操作,包括基本赋值语句、累加语句、keep语句、retain语句、array语句、rename语句、length语句。


1.基本赋值语句

z=x y;

z=sum(x,y);  sum函数的好处是可以克服缺失值的影响;

 

2.如果表达式中既有数值型变量又有字符型变量的话,则会将字符型变量转化为数值型变量

3.系统在编译阶段,对于赋值语句变量,如果是字符型变量则长度为1,如果是数值型变量则长度为8,接下来,系统将执行赋值语句,这时变量长度将由第一次读入的表达式的运算结果决定。一旦第一次读入确定长度之后,下一次pdv无论读入多长的数据,都不会改变变量的长度。除非提前用length语句限定变量的长度。

 

4.累加语句

x 1,x (-1)都是累加语句,其中x必须是数值型变量,在编译阶段,pdv自动设置累加变量值为0,它的值从当前执行后一直保留在pdv中,直到下一次执行为止。

在项目实践中,一般用retain语句替代累加语句,因为retain语句可以初始化累加变量为一个非零值,而累积语句初始值只能为0.

 

5.keep语句(keep语句不是可执行语句)

Data a3;

  set sashelp.class(keep=name weight);

  x=1;

  keep name x;

Run;

 

Data a4(keep=name x);

    set sashelp.class(keep=name weight);

    x=1;

Run;

以上两个程序输出结果一样,

但是对于读入数据集时,keep=的形式性能要远高于keep的形式,因为keep=的形式是仅限后面的变量进入pdv,对于拥有几百个变量的数据集而言,keep=效率要高;

不过对于数据输出方面,keep=keep性能没有区别;上面两个语句性能完全一样。

6.retain语句(不是一个可执行语句

pdv运行规律:data语句与run语句构成了一个循环语句,一般情况下每读一遍data步所有语句时,pdv都会清空所有变量值,并设置为缺失值。然后根据执行语句,再次对变量进行赋值。当data步使用retain语句时,pdv则不会清空retain语句对应变量,而是一直保留直到下次该变量再次执行。

retain语句在data步中有着广泛的应用,对于数据集的操作可以到单元格,而一般函数只能操作到列,实际应用中retain会使程序更加灵活化。可以控制一个变量的值不变,除非有外部的条件的变化而变化。

retain语句主要实现以下需求:

汇总数据,累加变量,纵向比较变量,创建flag标识变量,处理缺失值,迭代累加字符变量值。

Eg:关于汇总数据的一个例子(按照每个id,汇总cns的值,汇总id的记录数,如果txn_cde变量取101201两个值,则累加计算一次,计算txn_dte的最小值,)

libname chapt4 "f:\data_model\book_data\chapt4";

data chapt4.retain1;

input id txn_cde$ cns txn_dte$;

cards;

10 101 10 20070101

10 101 20 20080402

10 201 30 20050203

20 101 40 20040105

20 201 50 20040105

20 301 60 20070806

20 201 70 20050607

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值