前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SAS学习︱逻辑库、数据集创建与查看、数据库链接(SAS与R的code对照)

SAS学习︱逻辑库、数据集创建与查看、数据库链接(SAS与R的code对照)

作者头像
悟乙己
发布于 2019-05-26 23:27:14
发布于 2019-05-26 23:27:14
4.2K00
代码可运行
举报
文章被收录于专栏:素质云笔记素质云笔记
运行总次数:0
代码可运行

版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/52839677

———————————————————————————

入门学习一周,开始写学习笔记。用习惯R之后,发现SAS程序相对python R还是有点繁杂。但是业务需要,不得不学一下。

代码部分大多来源于姚志勇老师的《SAS编程与数据挖掘商业案例》。

——————————————————————————————————————————

一、逻辑库、数据集、数据字典

数据字典>逻辑库>数据集

逻辑库=工作空间,存储四类内容,test是数据集文件,views是视图(相当于R里面的views点击查看),formats代表文件,sasmacr代表目录内容。

数据集,包括数据文件+SAS视图,可以像R中双击获取数据结构图表,不过这样效率较低,可以使用其他方法,譬如数据字典的方式describe view,详细内容见三、数据查看。

数据字典,是当年进程中所有内容的逻辑库、数据表的一个平铺、列出来。所以,在全局检索上十分有效。我觉得这个非常有用,不过貌似网上对其的定义比较少。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
libname fv "F:\SAS\SAS 9.4 space";      /*fv是数据库名字*/
data fv.forever;    /*  #forever代表在fv下的forever数据集*/
Input x y z;
Cards;             
1 2 3
4 5 6
;
run;

code解读:

libname建立逻辑库,相当于R中的workspace中的一个文件夹;

data代表数据表格,data.frame;

与R数据输入不同的是,数据之间不是用逗号,而是空格来进行分割。

1、关于libname

如果,没有libname步骤,直接,data,那么就默认存放在SAS中的默认逻辑库之中,默认逻辑库名字叫“work”。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
libname lb clear;       #删除

代表删除libname

2、关于数据字典

本节参考海纳百川BLOG的:SAS数据字典访问

访问数据字典方法如下:

1.直接用SQL语句访问Dictionary table 2.访问SAShelp View

表名

包含信息

视图名

DICTIONARY.CATALOGS

SAS目录册及所包含的条目

SASHELP.VCATALG

DICTIONARY.COLUMNS

列(或变量)及其特征

SASHELP.VCOLUMN

DICTIONARY.DICTIONARIES

所有表词典

SASHELP.VDCTNRY

DICTIONARY.EXTFILES

文件标识名和外部文件物理存储地址

SASHELP.VEXTFL

DICTIONARY.INDEXES

SAS数据集索引

SASHELP.VINDEX

DICTIONARY.MEMBERS

SAS数据集

SASHELP.VMEMBER

DICTIONARY.OPTIONS

目前设定的SAS系统选项

SASHELP.VOPTION

DICTIONARY.STYLES

ODS类型

SASHELP.VSTYLE

DICTIONARY.TABLES

SAS数据文件和视图

SASHELP.VTABLE

DICTIONARY.VIEWS

SAS数据视图

SASHELP.VVIEW

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*数据字典把当前SAS环境中的所有内容进行汇总归类到这个里面,方便检索*/
proc sql flow=10;
title2 'do the columns have formats,informats,or labels';
title3 'dictionary.columns';                                    
/*#所有表的列变量*/
create table colinf as
select name,type,length,label,format,informat                  
/*#变量名称*/
from dictionary.columns
where libname='SASHELP' and memname='CLASS';
/*#注意要大写	*/

打开explorer window,在SASHELP这个library下,以V开头的视图实际上是Dictionary table内容的复制。如

proc sql;describe view sashelp.voption;quit;

可以看到voption这个视图的内容来自dictionary.options。 而对于View,除了SQL,直接用data步或proc步都可以访问。如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data test2;
set sashelp.vcolumn;
where libname="WORK" and memname="TEST";
run;

或者 proc contents data=sashelp.voption; run;或者在command栏输入viewtable sashelp.voption。

——————————————————————————————————————————

二、SAS的数据导入与其他平台接入方式

SAS获取数据的几个方式:外部数据导入、passthrough方式、import方式、input方式。大多通过libname来调入。

1、数据库外部接入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*#数据库,外部接入*/
libname hsdb db2 user=xxuser password="xxxx" datasrc=datadb;
/*	#在逻辑库hsdb中,db2代表数据库名称,datasrc代表SQL中的数据集名称*/

还有RODBC访问。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*通过RODBC访问 需要设置很多内容*/
libname odb odbc user=*** password=*** datasrc=test;
libname hsdb odbc noprompt="uid=xxxuser;pwd=xxxxx;dsn=datadb;" schema=hsuser

2、外部导入,spss数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*SPSS数据集,外部接入*/
libname sps spss '';

3、oracle数据集,外部接入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/*oracle数据集,外部接入*/
libname oralib oracle user=xxx pw=xxx path dbmssrv schema=educ;

4、input方式导入数据

input里面有很多小符号,譬如@@ 和@的区别,$&。不过,也正是这些符号,让我觉得... 导个数据也忒费劲了...不过,这个也是数据输入中最复杂的问题了。。

关键就在这指针问题上,

@代表指针还在这行,只能罩着下一个input,如果没有两个input,那么跟没有@一样,直接跳到下一行;接下来一个有,则相当于指针在这行;

@@代表指针一直在同一行;

没有@,代表指针跳到下一行。

"$",表示字符型变量,&代表数值型。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data test;
    infile cards ;
    input x @;       /*单个@,能H住,有效期到下一个input语句*/
    input y;           /*没有@,H不住,下一个input语句会去读新的一行*/
    input z @@;    /*两个@,H住没问题,有效期延长到Data步下一圈*/
cards;
1 2 3
4 5 6
7
;

@只能在输入数据“1 2 3”之后要换行输入“4 5 6”才能被识别 @@可以无视这个,因为其关注“input xxx”,可以直接在cards;后输入数据“1 2 3 4 5 6”,系统自动识别为两组数据

参考百度文库:

——————————————————————————

两个都是行控制符(就是SAS阅读你的数据时,在每一行里面的阅读数)

@ 表示执行下一个操作时,指针移到下一个记录(也就是下一行)。

@@表示执行下一个操作,指针保持在当前记录(当前行)。

举个例子:(数据录入我使用两种方式,以便于看出@与@@的阅读区别)

(1):录入数据时占用一行的空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data a;
  input x y @;(当仅仅使用一个@时)
  cards;
  1 2 3 4 2 2 3 5 3 2 1 1 (数据占用一行空间)
  ;run;
proc print data=a;
run;

(阅读结果如下)

data a: (此时SAS仅仅读了1次,显然没有读完,就跳到下一行阅读下一个数据,因为下一行没有数据可读,所以就读了一次就完了)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  The SAS System     17:52 Saturday, October 27, 2014  23
                                         Obs    x    y
                                          1     1    2
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data b;
  input x y @@;
  cards;
  1 2 3 4 2 2 3 5 3 2 1 1 (数据占用一行空间)
  ;run;
proc print data=b;
run;

(阅读结果如下)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data b(此时SAS读了6,显然这次是正确的,因为使用@@时,数据在当前行连续阅读)
            The SAS System     17:52 Saturday, October 27, 2014  24
                                         Obs    x    y
                                          1     1    2
                                          2     3    4
                                          3     2    2
                                          4     3    5
                                          5     3    2
                                          6     1    1

(2):录入数据时占用多行空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data a; (当仅仅使用一个@时)
  input x y @;
  cards;  1 2 3 4
2 2 3 5  (数据占用三行空间)
         3 2 1 1
  ;run;
proc print data=a;run;

(SAS阅读情况如下)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data a:(此时SAS仅仅读了3,显然没有读完,因为每一行没有连续读完,就开始阅读新下一个数据,也就是光标就跳到了下一行)
     The SAS System     17:52 Saturday, October 27, 2014  25
                                         Obs    x    y                                          
                                          1     1    2                                          
                                          2     2    2                                          
                                          3     3    2            
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data b;
  input x y @@;
  cards;
  1 2 3 4
  2 2 3 5
  3 2 1 1
  ;run;
proc print data=b;
run;

(SAS阅读情况如下)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data b;(此时SAS阅读了6次,显然这次阅读的阅读时正确的,因为每一行都是连续读取之后再读取下一记录,也就是跳到下一行)
           The SAS System     17:52 Saturday, October 27, 2014  26
                                                                                                
                                         Obs    x    y                                          
                                                                                                
                                          1     1    2                                          
                                          2     3    4                                          
                                          3     2    2                                          
                                          4     3    5                                          
                                          5     3    2                                          
                                          6     1    1            

——————————————————————————————————————————

三、数据查看方式:content/data/proc sql三种方式

数据查看也有很多方式,譬如content、data/proc sql包括双击也是一种方式,一共四种方式。

1、content方式

查询数据的内容(summary) 针对一些头文件里面的隐藏数据集,可以用这样的方式看到,类似summary,不过内容没有那么详细。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proc contents data=fv.forever out=class;run;

out代表将查询内容打印出来,并存放在临时逻辑库work之中。

2、data方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
data class/view=class1;
set fv.forever
;
run;

3、sql方式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
proc sql;
create view class2 as
select*from fv.forever;
quit;

———————————————————————————

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年10月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
html 转 js_js加载html字符串
大家好,又见面了,我是你们的朋友全栈君。 <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”> <html xmlns=”http://www.w3.org/1999/xhtml”> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ /> <script> var toJs =function(){ var html = document.getElementById(“myhtml”).value; var reg=new RegExp(“\r\n”,”g”); html = html.replace(/\’/g,”\\'”).replace(/\”/g,’\\”‘); html=html.replace(/[\r\n]/g,’\”\+\r\”‘); html=html.replace(/\”\s*\”\+/g,”); html=html.replace(/\”\s+</g,’\”<‘); document.getElementById(“myjs”).value=”\””+html+”\””; } </script>
全栈程序员站长
2022/10/03
8.7K0
jquery:时间类型字符串转为Date类型「建议收藏」
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
7120
LocalDateTime方式字符串转Date
转载于:https://my.oschina.net/renliangrong/blog/3004460
全栈程序员站长
2022/11/09
3810
js设置字符编码utf8_字符串转换成html
$(‘#scriptCode’).html(htmlspecialchars(str));
全栈程序员站长
2022/10/04
4.2K0
js将时间戳转化为年月日时分秒_时间戳转换成日期
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/16
5.1K0
excel截取指定字符之后的字符串_怎样把单元格的字符串拼接起来
需求:截取A1单元格字符串的一部分(第四个字符算起,截取2个字符)放在A2单元格。 函数:mid 公式:=mid(A1,4,2)
全栈程序员站长
2022/11/15
7230
json字符串转换为实体类_java类字符串转为日期格式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/10/04
9310
json字符串转换为实体类_java类字符串转为日期格式
SQLserver字符串转日期_sqlserver合并字符串
sqlserver: CONVERT(datetime,#{transaction_date_time},20),
全栈程序员站长
2022/11/08
1.4K0
js获取当前日期并格式化_json格式怎么打开
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/29
8.1K0
js获取当前日期并格式化_json格式怎么打开
Mysql,Oracle字符串转Date函数[通俗易懂]
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/09
2.6K0
js判断是否是字符串_js正则表达式匹配字符串
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/08
5.9K0
utc时间戳转换器_java时间转字符串
1、String utcStr = “Thu Aug 14 16:45:37 UTC 2011”;
全栈程序员站长
2022/11/09
2.2K0
js判断是否包含指定字符串_js判断字符串是否相等
indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。
全栈程序员站长
2022/11/08
15.6K0
js 字符串转json对象_json字符串转java对象
使用typeof来获取对象user1Str的类型,能看到控制台输出的user1的值以及它的类型string。
全栈程序员站长
2022/09/30
8.3K0
js数组对象转字符串方法_数组表示
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/09/30
6.9K0
linux时间戳转换日期格式_shell脚本获取时间戳
time_t date_to_timestamp(char *date, char *pfmt)
全栈程序员站长
2022/11/10
8.7K0
sql日期时间转换成字符串_把时间格式转化为字符串格式
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/10
2.1K0
js判断字符串是否为空字符串类型_字符串为空怎么表示
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
全栈程序员站长
2022/11/17
3.6K0
c语言字符串转换为整型_c语言输出负数用什么
注意:整型变量与字符变量相加减是使用ASCII码值,可以通过类型转换或格式字符来控制打印。
全栈程序员站长
2022/11/02
2.3K0
字符串数组转集合_安全方法把字符串转集合
//字符串拆分转集合 List<String> result = Arrays.asList(str.split(“,”));
全栈程序员站长
2022/11/04
1.8K0
推荐阅读
相关推荐
html 转 js_js加载html字符串
更多 >
目录
  • 一、逻辑库、数据集、数据字典
    • 1、关于libname
    • 2、关于数据字典
  • 二、SAS的数据导入与其他平台接入方式
    • 1、数据库外部接入
    • 2、外部导入,spss数据
    • 3、oracle数据集,外部接入
    • 4、input方式导入数据
  • 三、数据查看方式:content/data/proc sql三种方式
    • 1、content方式
    • 2、data方式
    • 3、sql方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档