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

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

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

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

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

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


[html] view plaincopy
print?
  1. libname fv "F:\SAS\SAS 9.4 space";      /*fv是数据库名字*/  
  2. data fv.forever;    /*  #forever代表在fv下的forever数据集*/  
  3. Input x y z;  
  4. Cards;               
  5. 1 2 3  
  6. 4 5 6  
  7. ;  
  8. run;  

code解读:

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

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

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


1、关于libname

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

[html] view plaincopy
print?
  1. 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

 


[html] view plaincopy
print?
  1. /*数据字典把当前SAS环境中的所有内容进行汇总归类到这个里面,方便检索*/  
  2. proc sql flow=10;  
  3. title2 'do the columns have formats,informats,or labels';  
  4. title3 'dictionary.columns';                                      
  5. /*#所有表的列变量*/  
  6. create table colinf as  
  7. select name,type,length,label,format,informat                    
  8. /*#变量名称*/  
  9. from dictionary.columns  
  10. where libname='SASHELP' and memname='CLASS';  
  11. /*#注意要大写    */  

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

proc sql;describe view sashelp.voption;quit;


   可以看到voption这个视图的内容来自dictionary.options。   而对于View,除了SQL,直接用data步或proc步都可以访问。如
[html] view plaincopy
print?
  1. data test2;  
  2. set sashelp.vcolumn;  
  3. where libname="WORK" and memname="TEST";  
  4. run;  

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

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


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


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

1、数据库外部接入

[html] view plaincopy
print?
  1. /*#数据库,外部接入*/  
  2. libname hsdb db2 user=xxuser password="xxxx" datasrc=datadb;  
  3. /*  #在逻辑库hsdb中,db2代表数据库名称,datasrc代表SQL中的数据集名称*/  

还有RODBC访问。

[html] view plaincopy
print?
  1. /*通过RODBC访问 需要设置很多内容*/  
  2. libname odb odbc user=*** password=*** datasrc=test;  
  3. libname hsdb odbc noprompt="uid=xxxuser;pwd=xxxxx;dsn=datadb;" schema=hsuser  

2、外部导入,spss数据

[html] view plaincopy
print?
  1. /*SPSS数据集,外部接入*/  
  2. libname sps spss '';  

3、oracle数据集,外部接入

[html] view plaincopy
print?
  1. /*oracle数据集,外部接入*/  
  2. libname oralib oracle user=xxx pw=xxx path dbmssrv schema=educ;  

4、input方式导入数据


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

关键就在这指针问题上,

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

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

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

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

[html] view plaincopy
print?
  1. data test;  
  2.     infile cards ;  
  3.     input x @;       /*单个@,能H住,有效期到下一个input语句*/  
  4.     input y;           /*没有@,H不住,下一个input语句会去读新的一行*/  
  5.     input z @@;    /*两个@,H住没问题,有效期延长到Data步下一圈*/  
  6. cards;  
  7. 1 2 3  
  8. 4 5 6  
  9. 7  
  10. ;  
@只能在输入数据“1 2 3”之后要换行输入“4 5 6”才能被识别
@@可以无视这个,因为其关注“input xxx”,可以直接在cards;后输入数据“1 2 3 4 5 6”,系统自动识别为两组数据

参考百度文库:

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

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

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

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

 

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

 

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

[html] view plaincopy
print?
  1. data a;  
  2.   input x y @;(当仅仅使用一个@时)  
  3.   cards;  
  4.   1 2 3 4 2 2 3 5 3 2 1 1 (数据占用一行空间)  
  5.   ;run;  
  6. proc print data=a;  
  7. run;  


(阅读结果如下)

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

[html] view plaincopy
print?
  1. The SAS System     17:52 Saturday, October 27, 2014  23  
  2.                                        Obs    x    y  
  3.                                         1     1    2  

[html] view plaincopy
print?
  1. data b;  
  2.   input x y @@;  
  3.   cards;  
  4.   1 2 3 4 2 2 3 5 3 2 1 1 (数据占用一行空间)  
  5.   ;run;  
  6. proc print data=b;  
  7. run;  


(阅读结果如下)

[html] view plaincopy
print?
  1. data b(此时SAS读了6次,显然这次是正确的,因为使用@@时,数据在当前行连续阅读)  
  2.             The SAS System     17:52 Saturday, October 27, 2014  24  
  3.                                          Obs    x    y  
  4.                                           1     1    2  
  5.                                           2     3    4  
  6.                                           3     2    2  
  7.                                           4     3    5  
  8.                                           5     3    2  
  9.                                           6     1    1  


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

[html] view plaincopy
print?
  1. data a; (当仅仅使用一个@时)  
  2.   input x y @;  
  3.   cards;  1 2 3 4  
  4. 2 2 3 5  (数据占用三行空间)  
  5.          3 2 1 1  
  6.   ;run;  
  7. proc print data=a;run;  


(SAS阅读情况如下)

[html] view plaincopy
print?
  1. data a:(此时SAS仅仅读了3次,显然没有读完,因为每一行没有连续读完,就开始阅读新下一个数据,也就是光标就跳到了下一行)  
  2.      The SAS System     17:52 Saturday, October 27, 2014  25  
  3.                                          Obs    x    y                                            
  4.                                           1     1    2                                            
  5.                                           2     2    2                                            
  6.                                           3     3    2              

                              

                                                                                                      

[html] view plaincopy
print?
  1. data b;  
  2.   input x y @@;  
  3.   cards;  
  4.   1 2 3 4  
  5.   2 2 3 5  
  6.   3 2 1 1  
  7.   ;run;  
  8. proc print data=b;  
  9. run;  


(SAS阅读情况如下)

[html] view plaincopy
print?
  1. data b;(此时SAS阅读了6次,显然这次阅读的阅读时正确的,因为每一行都是连续读取之后再读取下一记录,也就是跳到下一行)  
  2.            The SAS System     17:52 Saturday, October 27, 2014  26  
  3.                                                                                                   
  4.                                          Obs    x    y                                            
  5.                                                                                                   
  6.                                           1     1    2                                            
  7.                                           2     3    4                                            
  8.                                           3     2    2                                            
  9.                                           4     3    5                                            
  10.                                           5     3    2                                            
  11.                                           6     1    1              


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


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


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

1、content方式

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

[html] view plaincopy
print?
  1. proc contents data=fv.forever out=class;run;  

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

2、data方式

[html] view plaincopy
print?
  1. data class/view=class1;  
  2. set fv.forever  
  3. ;  
  4. run;  

3、sql方式

[html] view plaincopy
print?
  1. proc sql;  
  2. create view class2 as  
  3. select*from fv.forever;  
  4. quit;  

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

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

相关文章

sqlserver 如何把一列分为一行显示_SqlServer数据库如何快速修改表的一列值

工作中我们会遇到一个表的一列值需要进行整体更换为另一个表的某个字段的值,那么我们该如何处理呢?数据源Room表新的Room表现将Room表的RoomTypeID列替换成Room_new表的RoomTypeID方法一:直接修改update Room set RoomTypeID (select RoomTy…

Linux 命令行通配符及转义符的实现

我们想对一类文件批量操作,例如批量查看硬盘文件属性,那么正常命令会是: [rootlinuxprobe ~]# ls /dev/sda [rootlinuxprobe ~]# ls /dev/sda1 [rootlinuxprobe ~]# ls /dev/sda2 [rootlinuxprobe ~]# ls /dev/sda3 但有些时候确实不知道分区…

windows python 访问mtp存储空间_用Windows电脑训练深度学习模型?超详细配置教程来了...

虽然大多数深度学习模型都是在 Linux 系统上训练的,但 Windows 也是一个非常重要的系统,也可能是很多机器学习初学者更为熟悉的系统。要在 Windows 上开发模型,首先当然是配置开发环境。Kaggle Master 及机器学习实践者 Abhinand 立足于自己的…

Matlab自带排序函数sort用法

Matlab自带排序函数sort用法 [Y,I] sort(X,DIM,MODE) sort函数默认Mode为ascend为升序,sort(X,descend)为降序排列。 sort(X)若X是矩阵,默认对X的各列进行升序排列 sort(X,dim) dim1时等效sort(X) dim2时表示对X中的各行元素升序排列 Matlab中给一维向量…

PostgreSQL学习手册(数据表)

一、表的定义: 对于任何一种关系型数据库而言,表都是数据存储的最核心、最基础的对象单元。现在就让我们从这里起步吧。 1. 创建表: CREATE TABLE products ( product_no integer, name text, price nu…

织梦联动类别-地区调用不显示第三级城市的解决方法

织梦联动类别-地区调用不显示第三级城市的原因 1、附加表dede_addoninfos 或者 你的其他表中的字段nativeplace数据类型为int型,无法保存第三级城市对应的的evalue值(比如:东山区 对应的 10001.001) 2、枚举表dede_sys_enum中的第三级城市对应evalue值…

js 随机1-10随机数_寻找随机的错误-一个真实的故事

js 随机1-10随机数几周前,我完成了RapidFTR开源项目的错误查找 ,这花了我三个晚上。 我认为可能值得分享狩猎的故事。 本文将介绍我的工作。 我将概述我的旅程,以便真正找到正在发生的事情的根本原因。 我在本文中的目标是突出显示可以使用的…

用python写九九乘法口诀表左上角_python打出九九乘法口诀表

用IDLE打出乘法口诀表,想要就是如下图的结果:实现算法很简单,但是IDLE(python3.7)默认的换行输出方式不太容易实现,得需费一番脑筋。代码如下:*row0 #设置行数,值为1时候…

设计模式(一)Chain Of Responsibility责任链模式

设计模式篇章,源于网课的学习,以及个人的整理 在我们接收用户提交的字符时,常常会使用到过滤,在学习责任链模式前,我们是这样做的 1.定义一个类 public class MsgProcesser {String msg;public MsgProcesser(String ms…

如果你是IT技术人员,请思考这15个问题

行内的人自嘲是程序猿、屌丝和码农,行外的人也经常拿IT人调侃,那么究竟是IT人没有价值,还是没有仔细思考过自身的价值? 1.搞IT的是屌丝、码农、程序猿? 人们提到IT人的时候,总会想到他们呆板、不解风情&…

在Windows上运行-XX:CompileCommand

HotSpot JVM提供了几个与即时 ( JIT )编译有关的命令行参数。 在本文中,我介绍了开始应用命令行标志-XX:CompileCommand所需的步骤,以查看对单个方法执行的即时编译。 JIT概述 Nikita Salnikov-Tarnovski的博客文章您…

匹配中文字符的正则表达式: [u4e00-u9fa5](

匹配双字节字符(包括汉字在内):[^x00-xff]评注:可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)匹配空白行的正则表达式:ns*r评注:可以用来删除空白行匹配HTML标记的正则表达式&…

python define function的顺序_Python怎么根据一个函数来决定列表顺序

def__init__(self,function):self._queue[]self.functionfunction然后要写一往列表里增加元素的方法,按照function排序,function类型为函数defadd(self,item):"""AddtothisP...def __init__(self,function):self._queue []self.function…

excel单元格内容合并

这几天在整理数据,有时候数据都在表格的不同单元格中,想把两格内容合并为一格,于是验证了两种方法方法一:(1)在B1输入公式A1&B1(2)做完第一步后,选中B1后,鼠标移到单元格右下出现“”符号是下拉,就能得到结果,如图:方法二(1)在B1输入公式…

主分区与逻辑分区的区别

硬盘分区有三种,主磁盘分区、扩展磁盘分区、逻辑分区。 一个硬盘可以有一个主分区,一个扩展分区,也可以有一个主分区和若干逻辑分区。(图1为大家最常见硬盘分区类型) 主分区 主分区是硬盘的启动分区&#xff0c…

wxpython图形编程_wxpython  图像编程

1)目前遇到一个问题,就是wxpython显示一个图片,然后可以在图片上画矩形,点,line,circle and soon,最后保存矩形的坐标.但是现在可以在屏幕上画矩形,无法在图片上做标记,我反思的原因…

如何利用火狐获取网址中的提交链接

1、添加firebugz组件 2、用火狐打开你要的获取链接的网址例如 http://www.dce.com.cn/dalianshangpin/xqsj/tjsj26/jdtj/jdcjpm/index.html 3、按F12 4、点击你查询的按钮如点击如图下中的年月然后在firebug上点击网络获取里面的post链接 5、点击HTML 中的一个post &#xf…

python-22 eval json pickle shelve 之间差别

1.eval:可以转化字符串,字典,元组,列表等一般类型,不能转化类,函数 2.json:可以转化一般类型外,还可转化函数,可以在任何语言间转化,转化为字符串,可以写入文本&#xff…

打破冷漠僵局文章_研究僵局–第1部分

打破冷漠僵局文章我敢肯定我们都去过那里:太晚了,您饿了,您的服务器已挂起,或者您的应用程序正在以蜗牛的速度运行,并且有人喘着粗气想要您解决问题,然后再去解决。 您的应用程序意外挂起的可能原因之一是称…

vs2008下设置.h, .lib和 .dll 的路径配置全图及其意义

文件夹: 类型文件 include: .h (头文件) lib: .lib (库) 前面二者在vs2008中通过属性来配置。 bin: .dll (动态链接库) 动态链接库是通过系统路径来配置的。 添加库(libs)文件目录 …