大家好,欢迎来到IT知识分享网。
版权声明:本文为博主原创文章,未经博主允许不得转载。 【转载】SAS操作知识点记录
SAS数据集
sas数据集是由sas创建并且处理的文件
浏览描述部分
contents过程可以显示sas数据集的描述部分
procproc contents DATA=SAS-data-set +变量名;
run;
SAS逻辑库
逻辑库引用名(libref)
LIBNAME libref "SAS-data-library"<option>
- 1
libname orion "s:\workshop";
- 1
其中orion是逻辑库名,”s:\workshop”是指SAS数据库中物理位置。
在这个我们自己创建的逻辑库中,每个SAS文件有一个二级名称。
SAS注释
/* comment */ *comment
- 1
- 2
- 3
SAS变量值
变量值的类型:分为数值型变量和字符型变量
缺失值:字符型缺失值显示为空格,数值型缺失值显示为句点
浏览数据部分
proc print data=数据集名称 +需要浏览的变量; run;
- 1
- 2
浏览数据部分和浏览描述部分是不一样的,注意区分开开
PROC PRINT DATA=SAS-data-set NOOBS; VAR variable(s); RUN;
- 1
- 2
- 3
读取数据集
内容大纲
这一节内容的话是我们处理数据的第一步,也就是接触数据的部分,我们的数据来源在这里分成了三种情况,第一种是本来就是SAS数据集,第二种是excel数据,第三种是带分隔符的原始数据,也就是csv数据。
读入SAS数据集
LIBNAME libref 'SAS-data-library'; DATA output-SAS-data-set; SET input-SAS-data-set; WHERE where-expression; KEEP variable-list; LABEL variable = 'label' variable = 'label' variable = 'label'; FORMAT variable(s) format; RUN;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
data work.subset1; set orion.sales; where Country='AU' and Job_Title contains 'Rep'; keep First_Name Last_Name Salary Job_Title Hire_Date; label Job_Title='Sales Title' Hire_Date='Date Hired'; format Salary commax8. Hire_Date ddmmyy10.; run
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
下面就讲解这段代码,首先解释几个语句。
libname
libname orion 's:\workshop';
- 1
- 2
这里是读入SAS数据集。
libname orionxls 's:\workshop\sales.xls';
- 1
这里的orionxls是逻辑库名,
’s:\workshop\sales.xls’;是指excel工作表的物理文件名,包括路径、文件名和扩展名。
data
data数据集呢是你创建的要放入SAS中的数据集,也就是你要把读入的数据放到哪个数据集中。
问题:要输出到过程步的数据集和你最终要输出的数据集之间有什么关系?
也就是你要输出到过程步的数据集
DATA output-SAS-data-set
- 1
可以看出data是创建的一个要输出的数据集。
data后面加上的是你数据集的名称。比如说上面这段代码就是说那你创建了一个名叫work.subset1的数据集。
where
where放在data数据步中呢,主要作用是
set
set这个语句呢就是把你外部的数据读入到你创建的data数据集中,set orion.sales是说你把orion.sales这个外部的数据读入到你创建的data数据中的命令,并在data步中进一步处理
SET input-SAS-data-set;
- 1
由上述可以set是读入数据集的操作。默认的情况下是读入所有的观测和变量,set语句能读入临时或永久数据集。
当然我们也可以选择要读入的数据种类,所以可以在data步中加入语句,来减少观测和变量的个数。
(where、keep 、drop、label、format、)
libname orion 's:\workshop'; data work.subset1; set orion.sales; run;
- 1
- 2
- 3
- 4
这个是指从一个命名为 orion.sales的永久SAS数据集中创建一个命名为Work.subset1的临时SAS数据集。
接着介绍在data步中可以添加的语句
where
一般表达形式:
WHERE where-表达式 ;
- 1
特殊where运算符:
选择变量的语句:drop和keep语句
drop语句是指定输出数据集中药删除的变量名称(这里是指在输出集中删除而已,原始数据中是没有改变的)
DROP variable-list;
- 1
keep语句是制定要写入的数据集的变量名称
KEEP variable-list;
- 1
keep First_Name Last_Name Salary Job_Title Hire_Date;
- 1
- 2
- 3
问题:读取带分隔符的原始数据文件用的语句是input,之前的语句是set,所以说有格式的文件读入的时候就不能用set了吧,只有非常标准的文件才能用set 读入
添加永久属性:label和format
SAS数据集的描述部分存储包含名称、类型(字符或数值)和变量长度的变量属性。(这三个属性是固有的必须有的意思)
label
label语句将描述标签赋给变量名
label Job_Title='Sales Title' Hire_Date='Date Hired';
- 1
- 2
在一个data步中使用label语句,通过标签存储在这个sas数据集的描述部分,使标签和变量永久关联
PS:如果想要标签展示在输出的数据集中,则需要在proc print +数据集 后面加上label这个语句。
format
format语句将格式赋给变量值
FORMAT variable(s) format;
- 1
格式是SAS用于写出数据的一个指令。
在data步中使用format语句,通过将格式存储在SAS数据集的描述部分中,使格式和变量永久关联。
特别要注意的是数值型格式和日期型格式。
format Salary commax8. Hire_Date ddmmyy10.
- 1
这里指出salary变量的格式为commax8.以及Hire_Date变量的格式是ddmmyy10.
PS:
标签和格式也能存储在描述符部分
SAS中的输出是一条一条输出呢还是一次性输出呢?
读取Excel数据
libname orionxls 's:\workshop\sales.xls';
- 1
excel工作簿中的每个工作表被当做一个SAS数据集
libname orionxls 's:\workshop\sales.xls'; data work.subset2; set orionxls.'Australia$'n; where Job_Title contains 'Rep'; keep First_Name Last_Name Salary Job_Title Hire_Date; label Job_Title='Sales Title' Hire_Date='Date Hired'; format Salary comma10. Hire_Date weekdate.; run;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如果SAS将逻辑库名分配给一个Excel工作表,这个工作表将不能在excel中打开,要取消逻辑库,用libname语句并指定库名和clear选项。
libname orionxls clear;
- 1
从SAS数据集中创建Excel工作表:data或者copy
data
libname orionxls 's:\workshop\qtr2007a.xls'; data orionxls.qtr1_2007; set orion.qtr1_2007; run;
- 1
- 2
- 3
- 4
- 5
用copy创建excel表
libname orionxls 's:\workshop\qtr2007b.xls'; proc copy in=orion out=orionxls; select qtr1_2007 qtr2_2007; run; proc contents data=orionxls._all_; run; libname orionxls clear;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
注意在input读入的格式部分的处理以及format部分的格式处理。(这两者有区别吗??)
PS:注意where语句不能用于从一个原始数据文件中选择记录,只能用于从输入数据集中选择部分观测。
用import向导和程序读入一个excel表,export向导和程序创建一个excel表
读取带分隔符的原始数据(是不是就是csv数据呀)
这一节主要讲如何读取带分隔符的原始数据,那个带分隔符的原始数据又分为两种,一种是读取带分隔符的标准数据;一种是读取带分隔符的非标准数据,下面我们来看看这两种之前又什么区别和联系
区分标准数据和非标准数据
读取带分隔符的标准数据
DATA output-SAS-data-set; LENGTH variable(s) $ length; INFILE 'raw-data-file-name'; INPUT specifications; KEEP variable-list; LABEL variable = 'label' variable = 'label' variable = 'label'; FORMAT variable(s) format; RUN;
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
infile
infile语句用来定义原始数据文件的物理名称,以便于用input语句读入。(物理名称是指操作系统环境用于访问这个文件的名称,那我还是不懂啊,这个名称是具体到某个盘的某个文件夹下的名称吗)
infile 's:\workshop\sales.csv';
- 1
input
input语句描述了原始数据文件中的数值排列,同时将输入值付给相应的sas变量
DATA output-SAS-data-set; INFILE 'raw-data-file-name'; INPUT specifications; <additional SAS statements> RUN;
- 1
- 2
- 3
- 4
- 5
这里要写一个input语句和set语句的区别,还有一个问题,上文读入的excel语句是外部语句把
分隔符
一个空格(空白)是默认的分隔符,如果想指定其他的分隔符,则用DLM=选项 来进行指定
DATA output-SAS-data-set; INFILE 'raw-data-file-name' DLM='delimiter'; INPUT specifications; <additional SAS statements> RUN;
- 1
- 2
- 3
- 4
- 5
标准数据的列表输入
INPUT variable <$>;
- 1
- 2
变量一定要按照它们在原始数据文件中出现的顺序从左到有依次排列。
data work.subset3; infile 'sales.csv' dlm=','; input Employee_ID First_Name $ Last_Name $ Gender $ Salary Job_Title $ Country $; run;
- 1
- 2
- 3
- 4
- 5
非标准数据的列表输入
列表输入的格式如下:
INPUT variable <$> variable < :informat >;
- 1
:修饰符使你可以用一个输入格式读入带分隔符的非标准数据
input Employee_ID First_Name $ Last_Name $ Gender $ Salary Job_Title $ Country $ Birth_Date :date. Hire_Date :mmddyy.;
- 1
- 2
- 3
- 4
额外的SAS语句
data work.subset3; length First_Name $ 12 Last_Name $ 18 Gender $ 1 Job_Title $ 25 Country $ 2; infile 'sales.csv' dlm=','; input Employee_ID First_Name $ Last_Name $ Gender $ Salary Job_Title $ Country $ Birth_Date :date. Hire_Date :mmddyy.; keep First_Name Last_Name Salary Job_Title Hire_Date; label Job_Title='Sales Title' Hire_Date='Date Hired'; format Salary dollar12. Hire_Date monyy7.; run; ``` 记录缺失值 用连个连续的分隔符知名缺失值
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
DSD选项 infile语句中的dsd选项: 设置默认分隔符为逗号 将连续分隔符视为缺失值 可读入在引号内包含分隔符的数据值
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
@和@@的区别
data
set
选择观测和变量
一个变量运算数必须是来自输入数据集的一个变量。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/120567.html

