java 累加赋值_sas赋值语句,累加语句,keep,drop,rename,retain

赋值语句

variable=expression

几种赋值的实例:

x = x1+x2;

x = sum(of x1-x6); 括号中要用of

sum(x,y);如果x或y中有一个为缺失值,sum的结果会将缺失值设为0,而如果用z=x+y;有缺失值的话z的结果会为缺失值

ar(1) = br(1); *将数组br的第一个元素赋值给数组ar的第一个元素,sas中数组的下标以1开始;

x = x+y;

x

x=y=z *如果y=z则x=1否则为0;

赋值语句变量通过表达式计算后的类型有三种情况《是可执行语句》

数值型=数值型+数值型

字符型=字符型+字符型

数值型=数值型+字符型 (注:后面两个位置可以互换,例如x="1"+2,如果不能转换,日志窗口会报错)

rename语句

keep语句先于rename语句编译,两者都是不可执行语句.

rename y=yy;

keep x y;

rename选项一定要对所有重命名的变量用括号括起来

结果变量长度

字符型长度为1;数值型长度为8;

变量长度由第一次读入的表达式的运算结果决定,如char="ab";那么char的长度为3,无论下一次pdv读入多长的数据,都只会显示两个字节,如果在之前用length语句实现定义char的长度,那么就可以解决这个问题。

LENGTH variable-specification(s);

length m 5;

length m1 m2 7; *m1,m2两个长度都是7;

length m1 4 m2 6;

lenght m1 3 m2 $8;规定第二个为字符型的变量

累加语句与retain语句的区别《是可执行语句》

variable+expression

例如 x+1    x+(-1) 不能写成x-1   x+(y=z)

在编译阶段pdv自动将累加变量设置为0,如果想要其不为0,那么要用retain语句代替,累加语句可以视为retain的一个特例

Keep,drop语句《不可执行的语句》

Tips:(keep选项和keep语句的区别)

data a1;

set sashelp.class(keep= name sex);

/* keep name sex;*/ *如果使用keep语句而不使用keep选项,那么pdv会读入先所有的变量再保留需要保留的,而用keep=选项则能保持每次只读入需要读入的变量;  set sashelp.class(keep = _character_); *只读入字符型变量;  set sashelp.class(keep = _numeric_); *只读入数值型变量;

run;

drop语句的用法和keep一样,套着用就行,另外drop=选项的效率也高于drop语句。

retain语句《不可执行的语句》

这个比较重要了,我先解释下sas的运行机制

sas的data步和run语句之间其实是一个循环,比如当使用set语句的时候,每次set一条观测,一直运行到run;再返回程序开头,继续set第二条观测值,一直将数据集的观测值读取完。

系统每读一遍data步的所有语句时,pdv都会将所有变量设置为缺失值,在sas中用“.”表示。然后在进行接下来的其他语句时,再对变量进行赋值。但是如果我们在data步用到了retain语句

pdv就不会清空retain语句对应的变量,而是一直保留到下次改变了再被执行的时候,这样就能完成我上面说的初始值不为0的累加情况了

data a1;

retain m1-m5 (1); *m1为1其余权威缺失值;

retain m1-m5 1; *m1-m5全为1;

retain m1-m5 (1,2,3,4,8); *给每个赋予不同的值,和下面的没区别,需要分开执行;

retain m1-m5 (1 2 3 4 5);   retain m1-m5 (1:5);

put m1-m5;

run;

libname chapt4 ‘E:\sas-data\Book_data\Book_data\chapt4‘;

proc sort data=chapt4.retain1;by id ;run;

data a1;

set chapt4.retain1;

by id ;

retain cns_sum id_cnt txn_cde_conditon txn_dte_min; *如果省去retain txn_dte_min则每次循环,其值会为缺失值;

if first.id then do;

cns_sum=0;

id_cnt = 0;

txn_cde_conditon=0;

txn_dte_min=txn_dte;

end;

put cns_sum=;

cns_sum+cns; *但是如果不用省去前面的retain cns_sum id_cnt txn_cde_conditon,这些值不会出现错误,当不出现赋值语句的时候,只是累加,这些值在每轮循环中不会被置为缺失值,还是会有retain的效果;

id_cnt+1;

txn_cde_conditon+(txn_cde in ("101" "201"));

put txn_dte_min= txn_dte=;

txn_dte_min=min(txn_dte,txn_dte_min);*但是有赋值语句,就不能丢掉retain语句;

if last.id;

put "last.id";

run;

下面是数据集

d7ef8cdd5133e32aa80e70dc9e7102c0.png

sas赋值语句,累加语句,keep,drop,rename,retain

时间: 06-22

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值