sas sql 读取最后一行数据_SAS基础编程和数据处理

d8f3693bf81cc9e8062cadf384598379.png

前几天讲了数据分析中SQL的基本使用方法以及具体案例分析思路,接下来会继续讲统计基础以及在SAS软件内的应用,在这之前,本文先进行SAS基础使用编程的基础介绍,后续会主要阐述SAS软件内的统计数学的应用,如分析或初步建模等,当然了,也先推荐大家有关统计学和SAS学习的书籍:统计学的两本书,分别是《深入浅出统计学》和《商务与经济统计学》,关于SAS的书籍《深入解析SAS——数据处理、分析优化与商业应用》,大家看完之后,会有一个初步的认识。

本文主要介绍SAS编程和数据处理,会分为几个部分。

一 读取外部数到SAS数据集

1,通过使用libname..语句为一个SAS逻辑库分配引用名(临时逻辑库WORK除外),但逻辑库名不能超过8个字符,必须以字母或下划线开头,其余字符必须是字母,数字或者下划线:例如,下面的SAS语句定义了一逻辑库,引用名为saslib

libname saslib 'C:sasdata';

2,SAS变量属性包括变量名,类型,长度,输出格式(format),输入格式(informat)和标签,其中类型分为字符型和数字型,录入,下面的SAS语句定义一部分变量

data saslib.sales;

input ID $ Dept $ Sales Date;

format Sales comma10. Date yymmdd10.;

informat Date date9.;

label ID=”员工ID” Dept=“部门” Sales=“销售数据”;

label Date=“销售时间”;

datalines;

上述代码就定义了变量名以及对应的类型,长度,输出或输入格式。

3.查看数据集的描述信息内容,如数据集属性内容,仍以saslib.sales为例

Proc contents data=saslib.sales;

run;

就可以看到上述定义的变量名以及对应的类型,长度,输出或输入格式。

二 对单个数据集的处理

1,keep或drop选取部分变量:data步可以通过读取原数据集的部分变量来建立新数据集,仍以saslib.sales,读取变量ID和Sales,并建立新的数据集sales1,代码如下:

data saslib.sales1;

set saslib.sales(keep=ID Sales);

run;

proc print data= saslib.sales1;

run;

新的数据集只有两个变量:ID和Sales,我们也可以用drop语句,指定drop=ID和Sales之外的其他变量,结果是一样的

2,操作数据集的观测

1)if—then语句:SAS内的条件语句,与SQL或者Excel的使用方法类似,直接举例如下:if x<y then c=5;

else c=12;

2)if 条件表达式 then delete:使用delete语句删除满足条件的观测,举例如下:

仍然是saslib.sales数据集,寻找销售数据(Sales)不为缺失值的观测并建立新的数据集saslib.sales2,代码如下:

data saslib.sales2;

set saslib.sales;

if Sales=” ” then delete;

run;

proc print data= saslib.sales2;

run;

上述代码就可以求出销售数据(Sales)不为缺失值数据集,也可以求出其他不为某些条件的数据集,只需把if内的条件表达式进行更改即可,举例如下:在saslib.sales数据集中,选取ID>10的观测输出到数据集saslib.sales1,并将销售数据(Sales)>100的观测输出到数据集saslib.sales2,代码如下:

data saslib.sales1

saslib.sales2;

set saslib.sales;

if ID>10 then output saslib.sales1;

if Sales>100 then output saslib.sales2;

run;

proc print data= saslib.sales1;

run;

proc print data= saslib.sales2;

run;

3)if—then的赋值语句:仍然以数据集saslib.sales为例,当ID=8时,Sales提高20%,

ID=10时,Sales提高10%,其他情况,Sales都提高5%,并生成新的数据集saslib.sales3下面有几种写法,得出的结果是一致的,代码如下:

data saslib.sales3;

set saslib.sales;

if ID=8 then Sales= Sales*1.2 ;

else if ID=10 then Sales= Sales*1.1;

else Sales= Sales*1.05;

run;

proc print data= saslib.sales3;

run;

第二种写法:

data saslib.sales3;

set saslib.sales;

select (Sales)

when(8) Sales= Sales*1.2;

when(10) Sales= Sales*1.1;

otherwise Sales= Sales*1.05

run;

proc print data= saslib.sales3;

run;

以上两种的结果是一样的。

3 分组与排序

1)sort by过程排序:要求数据集结果内的观测按照by语句中的变量进行升序或降序排列,仍然以数据集saslib.sales为例,要求输出的数据集saslib.sales4按照Sales进行降序排列,代码如下:

Proc sort data=saslib.sales out= saslib.sales4;

by descending Sales;

run;

2)找到分组的第一个和最后一个观测:仍然以数据集saslib.sales为例,取每组ID内最高和最低的Sales,生成新的数据集saslib.sales2,代码如下:

data saslib.sales2;

set saslib.sales;

by ID;

if first.ID or last.ID;

run;

4,循环和数组

1)迭代do语句:基本形式为

do 索引变量=开始值< to 结束值><by 递进值><while (表达式)><until(表达式)>;

SAS语句;

End;

举例如下:使用do循环生成数据集do1,数据集包含变量x和y,x的值为1、3、5,y为x的平方。代码如下:

Data work.do1;

do x=1 to 5 by 2;

y=x**2;

output;

end;

run;

2)do until语句:重复执行do循环的语句,直到条件为真。基本形式如下

do until (表达式);

SAS语句;

end;

举例如下:将给定字符串中包含的各个单词分开写入数据集中

data work.all;

length word $20;

drop string;

string=”the quick brown fox jumps over the lazy dog”;

do until(lengthn(word)=0);

count+1;

word=scan(string,count);

output;

end;

结果如下:

6c35d2f74d5fd667107ea180fc808c37.png

三 对多个数据集的处理

1,数据集的纵向串联

1)set语句纵向串联:基本形式如下

Data 新数据集;

set 数据集1 数据集2………;

Run;

举例如下,对数据集work.New1和work.New1进行纵向串联,生成新的数据集work.New12,代码如下:

data work.New1;

input Emp_ID $ Emp_Name $ @@;

datalines;

ET001 Jimmy ED003 Emy EC002 Alfred EQ004 Kim

;

run;

data work.New2;

input Emp_ID $ Emp_Name $ @@;

datalines;

EQ122 Molly ET121 Dillon ET124 Helen ED123 John

;

run;

data work.New12;

set work.New1 work.New2;

run;

proc print data=work.New1;

run;

proc print data=work.New2;

run;

proc print data=work.New12;

run;

结果如下:

e642dfb88f92495bb7ced1e812af0ec2.png

2)by 语句穿插串联:所有舒服数据集先按照by变量排序,新的数据集也将按照该排序,基本形式如下:

Data 新数据集;

set 数据集1 数据集2………;

by 变量1 变量2…………;

Run;

2,merge by数据集的横向合并:使用by语句,也称为匹配合并,注意在使用by语句时,输入数据集必须按照by变量排序。这个点就不举例子了,和上篇文章内的SQL类似。

3,数据集的更改

modify语句进行单个数据集的更改:运用该语句可以更改原数据集中的变量,但是不能再原数据集中添加或者更改,举例如下:数据集work.inventory中包含产品,库存和价格的信息,先决定将每个产品的价格提高15%,代码如下:

data work.inventory;

modify work.inventory;

price=price*1.15;

run;

proc print data=work.inventory noobs;

run;

前后代码结果为:

00962bdf1e5b0282396d21ce1fb91138.png

4,使用自动变量first.与last.:data步如果使用了by语句,会自动生成两个数值型自动变量first.与last.变量,分别用来辨识by组合的第一条和最后一条观测,举例如下:

数据集Sales中包含了每位员工的销售额和员工所属部门以及性别数据,统计各部门男员工和女员工的总销售额,代码如下:

首先将数据集Sales按照Dept和Gender排序,在运用first.与last.变量计算:

proc sort data=work.sales;

by Dept Gender;

run;

data work.sales_dept;

set work.sales;

by Dept Gender;

retain sales_by_dept;

if first.Gender then

sales_by_dept=0;

sales_by_dept=sales_by_dept+sales;

if last.Gender;

keep Dept Gender sales_by_dept;

run;

proc print data=work.sales_dept noobs;

title 'Sales by Department by Gender';

run;

前后图表如下:

9268d20f19766952c53de78ef203f379.png

5,使用hash对象处理多个数据集:基本形式如下:

Declare object hash 对象名(<主题1:内容1 <,主题2:内容2,…………>>);

Hash 对象名.definekey(<主题1:内容1 <,主题2:内容2,…………>>);

Hash 对象名.definedata(<主题1:内容1 <,主题2:内容2,…………>>)

Hash 对象名. Definedone()

第一行定义hash的对象名称,第二行和第三行分别定义了对象的key变量和data变量,第四行表示hash对象定义结束。下面举例说明:

公司现有库存1000台汽车,每台车可以发往各个仓库,但是不同仓库给公司带来的边际收益不同,而且每个仓库有一定的容量限制,现在求每个仓库发多少车,同时公司的效益最高,下面是仓库收益数据集expected_profit和仓库容量数据集warehouse_constraint部分数据如下图:

a3cf255f251f86818d4c360cc873e1ae.png

代码如下:data work.allocation;

retain total_cars_before 1000;

length warehouse_id $6;

if _N_=1 then

do;

declare hash constraint(dataset: "work.warehouse_constraint");

constraint.definekey('warehouse_id');

constraint.definedata('capacity');

constraint.definedone();

call missing(warehouse_id,capacity);

end;

set work.expected_profit;

rc = constraint.find();

if rc = 0 and capacity>=1 and total_cars_before>=1 then

do;

capacity=capacity-1;

total_cars_after=total_cars_before-1;

rc=constraint.replace(key:warehouse_id, data: capacity);

if rc=0 then

do;

output work.allocation;

total_cars_before=total_cars_before-1;

end;

else put "Error: Replace capacity failed!";

end;

else if rc ne 0 then

put "Error: Failed to find warehouse capacity!";

keep warehouse_id capacity profit_margin total_cars_before total_cars_after;

run;

结果如下:

44bf8578a24f27ad2e8b4c84ac008ae7.png

至此,SAS基本的编程就说完了,后续会进行SAS的统计与初步建模探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/550355.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 列表索引位置,python – 在列表中查找值的第一个位置

一种方法是为项目创建单独的列表以查找索引并使用索引函数和使用列表理解(还要进行额外检查以确保项目在列表中,否则将发生ValueError)&#xff1a;my_list [1,1,1]items [1,2]print ([my_list.index(item) if item in my_list else -1 for item in items])输出&#xff1a;[…

Linux 下配置多路径及SCSI扫描磁盘重新发现大小

Linux SCSI扫描磁盘重新发现大小&#xff1a; # for i in find /sys/class/scsi_host/host*; do echo 1 >> $i/issue_lip; echo "- - -" >> $i/scan; done 1、安装多路径软件包&#xff1a;device-mapper-1.02.67-2.el5device-mapper-event-1.02.67.2.el…

代码合并工具_分享几款比较常用的代码比较工具

俗话说&#xff1a;三句不离本行&#xff0c;对于程序员这个可爱的群体来说也是一样&#xff0c;即使面对无休无止的编程工作&#xff0c;程序员们依旧任劳任怨的埋头苦干&#xff0c;梦想着用自己码下的代码改变世界。工欲善其事,必先利其器&#xff0c;每一位程序员都有自己私…

oracle9i 恢复数据库,Oracle9i RMAN备份及恢复步骤(zt)

1、切换服务器归档模式&#xff0c;如果已经是归档模式可跳过此步&#xff1a;%sqlplus /nolog (启动sqlplus)SQL> conn / as sysdba (以DBA身份连接数据库)SQL> shutdown immediate; (立即关闭数据库)SQL> startup mount (启动实例并加载数据库&#xff0c;但不打开)…

python 计量经济 35岁 工作_Python在计量经济与统计学中的应用

Python for Econometrics and Statistics (Python在计量经济与统计学中的应用) 【点击链接进入主页】。这套笔记将重点介绍Python在计量经济学与统计分析中的应用。内容涵盖Python基本数据类型&#xff0c;Numpy科学运算&#xff0c;Pandas数据分析&#xff0c;统计分析&#x…

循环控制

循环控制 定义 Python 循环语句是通过一条或多条语句的执行结果&#xff08;True 或者 False&#xff09;来决定执行的代码块。 并在符合条件的情况下跳出该段循环。 类似于控制语句。 如下图所示。 WHILE 循环 while 判断条件&#xff1a; 语句 求1~100的和 n 0 sum 0 while…

rest风格的get加密字符串怎么接收_RESTful Api的设计与风格,你该学一下咯

REST的重要概念REST全称是Representational State Transfer&#xff0c;中文意思是表征性状态转移。RESTful是指具有REST表征的web架构风格&#xff0c;并非必须遵守的规则。REST分离了API的结构和逻辑&#xff0c;主要应用于客户端和服务器交互类的软件。基于这种风格设计的软…

oracle截取字符串替换,oracle字符串操作:拼接、替换、截取、查找

‘拼接‘||‘字符串‘ as Str from student;2、使用concat(param1,param2)函数实现&#xff1a;select concat(‘拼接‘,‘字符串‘) as Str from student;注&#xff1a;oracle的concat()方法只支持两个参数&#xff0c;如果拼接多个参数&#xff0c;可以嵌套concat()&#xf…

oracle函数 INSTR(C1,C2[,I[,J]])

【功能】在一个字符串中搜索指定的字符,返回发现指定的字符的位置; 【说明】多字节符(汉字、全角符等)&#xff0c;按1个字符计算 【参数】 C1 被搜索的字符串 C2 希望搜索的字符串 I 搜索的开始位置,默认为1 J 第J次出现的位置,默认为1 【返回】数值 【示例】se…

mybatis3 oracle,Mybatis3中對oracle的批量插入

Mybatis批量插入的資料&#xff0c;很多都是mysql的&#xff0c;insert into ... values (),(),...醬紫。oracle中不支持這種語法&#xff0c;oracle中的批量插入是醬紫insert intoselcect... union all select ...。在這里http://my.oschina.net/u/232879/blog/118245有說明my…

python里 try里怎么用int函数_如何在不使用try / catch的情况下测试Python枚举中是否存在int值?...

测试价值变体1请注意&#xff0c;_member_names_具有一个名为in的成员(未记录...)&#xff1a;print(Fruit._value2member_map_)# {4: , 5: , 6: }您可以对照此地图测试值是否在_member_names_中&#xff1a;5 in Fruit._value2member_map_ # True7 in Fruit._value2member_map…

U盘安装可能会遇见UEFI的问题,使用easyBCD安装即可。

参考链接 CSDN博客 Tips 关于 (hd0,0) 如果出现 File not find的问题那么使用&#xff0c;(hd0,1) 后面的数字变一下&#xff0c;主要根据是&#xff0c;windows 的磁盘管理中的C盘的系统盘的序列。 转载于:https://www.cnblogs.com/eat-too-much/p/11120772.html

oracle truct,java向oracle 存储过程 传输数组

1 根据传参创建一个自定义类型create or replace type user_type force as object(age number,username nvarchar2(20),phone nvarchar2(20),syntime DATE)2 创建数组create or replace type user_type_arr as table of user_type3 创建存储过程create or replace procedure pr…

python 动态调整控件大小_python PyQt5如何让窗口控件与窗口大小同步变化?

在下面的代码中 self.tableWidget.resize(self.width()-20,self.height()-20)self.tableWidget.move(10,20)这两行没有起作用&#xff1f;不知为何&#xff1f;from PyQt5 import QtCore, QtGui, QtWidgetsfrom PyQt5.QtGui import QIconfrom PyQt5.QtWidgets import *from PyQ…

oracle sum详解,oracle sum()聚合函数

原文链接&#xff1a;https://blog.csdn.net/cizatu5130/article/details/100291347oracle sum()聚合函数2016-05-13 20:08:00 cizatu5130 阅读数 8Oracle 的sum聚合函数的功能就是求和(这里暂时不讨论分析函数用法)&#xff0c;一般用法不多讲&#xff0c;有个用法比较令人疑惑…

接口批量同步数据_千手接口平台+电商ERP,助德嵘大药房征战拼多多

拼多多对C端经营者来说&#xff0c;是一个处于红利期的第三方C端电商平台&#xff0c;进驻费比天猫低很多&#xff0c;而且流量成本也低&#xff0c;很多商家都跃跃欲试。但对于没有C端平台运营经验的商家&#xff0c;进驻后会发现几个"坑"&#xff1a;客单价低、退货…

FRM二级备考感想

真的是意料之中的Fail... 只有在Current Issues考得1&#xff0c;其他四门都是3... 复习的很不扎实&#xff0c;考前头脑里没有知识架构&#xff0c;考场无法对综合题目进行分析&#xff0c;直觉又从来靠不住。 同事说&#xff0c;二级不要想太多&#xff0c;就能过。 基础班视…

oracle静默文件建库,【配置上线】Oracle静默建库 for 11g

Oracle静默建库for 11g使用静默dbca创建数据库有两种方法&#xff1a;1)一种是根据oracle自身的数据库模板创建数据库(建议)&#xff0c;数据库模板位置$ORACLE_HOME/assistants/dbca/templates/*.dbcORACLE为我们提供了几个dbc模板&#xff1a;Data Warehouse数据仓库Transact…

word2vec python 代码实现_python gensim使用word2vec词向量处理中文语料的方法

word2vec介绍word2vec是google的一个开源工具&#xff0c;能够根据输入的词的集合计算出词与词之间的距离。它将term转换成向量形式&#xff0c;可以把对文本内容的处理简化为向量空间中的向量运算&#xff0c;计算出向量空间上的相似度&#xff0c;来表示文本语义上的相似度。…

【第55题】【062题库】2019年OCP认证062考试新题

55题、choose two Your database supports an online transaction processing (OLTP) workload in which one of the applications creates a temporary table for a session and performs transactions on it. This consumes a lot of undo tablespace and generates lots of …