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)<DEFAULT=n>;

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;

 下面是数据集

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

时间: 2024-10-07 17:45:12

sas赋值语句,累加语句,keep,drop,rename,retain的相关文章

sas条件判断语句

if语句<可执行语句> data b; set sashelp.class; if _n_ le 4; *如果if为真,则继续执行if后面的语句,最后输出满足if的条件的观测,如果if为假则立刻返回到data步开头继续执行下一条set语句; y = 'now'; /* y = 'now'; if _n_ le 4;也能得出同样的结果,但是效率相对来说较低,因为要重复执行y的赋值语句 */ run; if的另外两种格式if x=3 then y=4; 对于要表达的只有一条数据就用thenif x

转换sql文件的create table语句为drop table语句

1 package com.csii.pweb.query.action; 2 3 import java.io.BufferedReader; 4 import java.io.FileNotFoundException; 5 import java.io.FileReader; 6 import java.io.IOException; 7 import java.util.ArrayList; 8 import java.util.List; 9 10 11 public class Ja

SQL关于删除的三个语句:DROP、TRUNCATE、 DELETE 的区别。

DROP: DROP TABLE test; 删除表test,并释放空间,将test删除的一干二净. TRUNCATE: TRUNCATE test; 删除表test里的内容,并释放空间,但不删除表的定义,表的结构还在. DELETE: 1.删除指定数据 删除表test中年龄等于30的且国家为US的数据 DELETE FROM test WHERE age=30 AND country='US'; 2.删除整个表 仅删除表test内的所有内容,保留表的定义,不释放空间. DELETE FROM

SAS笔记(2) RETAIN语句

本文重点: 使用RETIAN,INPUT在每次循环执行时保留上一次PDV中的变量值. SUM语句和SET语句会自动RETAIN变量. 1. RETAIN语句 1.1 Example 1 先来看看在DATA步不使用和使用RETAIN语句的差异 没有使用RETAIN: DATA WITHOUT_1; PUT "Before the INPUT statement: " _ALL_; INPUT X @@; PUT "After the INPUT statement: "

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

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

oracle中delete drop truncate的用法和区别

数据库的运维中,经常会遇到delete drop truncate的操作,那么如何去把握它们的用法和区别呢? 比如当数据库空间爆满,已经增长到存储空间单个存储文件的最大值32G.你需要通过一些办法释放掉表空间或者扩容表空间来解决问题. 一般当系统中大量使用分区表,而针对分区表清除数据,是不会释放表空间的,必须把分区drop掉,才会释放空间. 下面我们具体了解一下这三个命令: 一.delete 1.delete是DML,执行delete操作时,每次从表中删除一行,并且同时将该行的的删除操作记录在r

Oracle的一些简单语句

drop后的表被放在回收站(user_recyclebin)里,而不是直接删除掉.这样,回收站里的表信息就可以被恢复,或彻底清除. 1.通过查询回收站user_recyclebin获取被删除的表信息,然后使用语句 flashback table <user_recyclebin.object_name or user_recyclebin.original_name> to before drop [rename to <new_table_name>]; 将回收站里的表恢复为原名

Oracle Flashback Drop: Undo a DROP TABLE Operation

7.4 Oracle Flashback Drop: Undoa DROP TABLE Operation Oracle Flashback Drop reverses theeffects of a DROP TABLE operation. It can be used to recover afterthe accidental drop of a table. Flashback Drop is substantially faster thanother recovery mechan

SQL语句基础之 管理数据库,表 和 数据

MySQL中的基本sql语句 MySQL中主要有三个大的对象,第一个是数据库,有了数据库后,我们才能在数据库里面建表,因为Mysql是关系数据库,它的数据都会以记录的形式存到表里,所以第二个是表,然后第三个才是数据.下面我们根据这个关系来学习一下mysql中的sql语句~ Sql语句管理数据库 1.查看Mysql中有哪些数据库 语句:show databases 2.创建一个数据库 语句: create database vmaxtam default character set utf8;--