SAS(八)SAS之DATA步--文件操作语句
SAS(八)DATA步
绝大部分的SAS语句都可分为两步:DATA步(打开、编辑、整理数据)和PROC步(分析、处理、显示数据)组成的,今天我们来学习DATA步相关知识点。
DATA步主要是运用到以下四个类型的语句:
- 文件操作语句
- 运行语句
- 控制语句
- 信息语句
在学习这种类型语句之前,先学习DATA步的流程
- DATA语句标志了数据步开始,并指定了数据步结束时要生成的数据集名字。
- 每次读入一行数据,读入后执行数据步中的其它语句,循环数据步读取整个数据。
- _N_变量表示DATA步已经执行的次数
- _error_变量值为1时表示程序出错
data flow;
file print; /*put x= y= z= _n_;*/ input x y; z=x+y; put x= y= z=; put _n_= _error_=; cards;
10 20
100 200
1000 2000
;
run; proc print data=flow;
title ' ';
run;
输出:
1、retain语句提到的变量
2、sum语句中创建的变量
3、数组_temporary_中的数据元
4、file和infile语句选项中创建的变量
5、自动变量
文件操作语句
DATA语句
DROP选项(不列出某些变量)
KEEP选项(列出某些变量)
LABEL选项(给数据集加标签)
RENAME选项(重命名变量)
首先这个是flow的数据集
data new1(drop=z); set flow;
run;
data new2(keep=x); set flow;
run;
data new3(label='the new3 dataset'); set flow;
run;
data new4(rename=(x=xx y=yy)); set flow;
run;
proc print data=new1;
run;
proc print data=new2;
run;
proc print data=new3;
run;
proc print data=new4;
run;
label可以在数据-右键属性看
1、data语句后无数据集名字,则自动生成 data1, data2等为数据集名字,相当于data _data_;
2、data _null_;不产生实际的数据集,只是把内容暂存于内存,以供put语句等读取结果,可以节约计算机资源
3、data _last_;以最近产生的数据集命名并取代其内容。
Input语句
分组格式:
input (g1-g5) (3*7.2 , 2*5.2);
input (a b) ( $5.)
input (a b) ($ , 5.)
@@-无需分行而按变量连贯读数据
data; input x @@; cards; 1 2 3 4 ; run; proc print; run;
@-固定该数据行;用于需要多个input语句同时读取一行数据。
data ; input type $ @; if type='c' then input course $ prof $; else if type='s' then input name $ id 3.2; cards; c math zxs s zhao 58888 ; proc print; run;
利用@n +n #n 进行指针控制
data inputtest; input @1 x 5.2 @6 y 2.1 +2 z #2 xx; cards;
12345678912345
234
;
proc print inputtest;
run;
个特殊符号的用法(: & ~)
: 读值时第一次遇到分隔符、或是数据行末尾、或是读满列数而结束
& 字符型输入值可以嵌有一个或几个空格
~ 字符型输入值保留引号(与infile 语句中选项dsd一起使用才有效)
data topics9; infile datalines dsd; input speaker :$15. title ~$40. location & $10.; datalines; Whitfield,'Looking at Lift',Blue Room Puentes,"Life After the Revolution",Red Room Townsend,"Peace in Our Times",Green Room ; proc print data=topics9; run;
Cards语句
- Cards语句与datalines语句可以通用
- 如果输入数据中含有分号,可用cards4语句或datalines4语句,同时,数据结尾用4个分号表示数据输入结束
data cardstest; input number citation $50.; cards4;
1 Berry
2 LIN ET AL., 1995; BRADY, 1993
3 BERG, 1990; ROA, 1994; WILLIAMS, 1992
;;;;
run;
proc print data=cardstest;
run;
Put语句
- Put语句负责在log窗口输出一些结果,file print选项可把输出转移到output窗口
- Put _infile_ (输出最新的数据行到SAS log 窗口)
- Put _all_ (输出所有变量的值)
- Put _page_ (输出新页)
data; /*file print;*/ /* change the output window*/ put 1230*'SAS学习'; run; proc print ; run;
File语句
File print 把put语句产生的输出结果转移到output窗口
data; file print;
/* change the output window*/ put 1230*'SAS学习'; run; proc print ; run;
By语句
- 在DATA步中,SAS系统对每个BY组创建两个临时变量:
- First .variable
- Last .variable
- 它们用来区别每个BY组的第一个和最后一个观测
Set语句
- 使用set语句复制数据集
- Point选项指明要读入的记录序号,set 数据集 point=指针变量;可用于抽样,一般与output语句连用
- Nobs选项创建一个临时变量用来存储数据集的观测总数
data abc; set peixun.oranges;
run;
proc print;
run;
原数据集如下
data zxs; do n=2 to total; set sasuser.flow point=n nobs=total; /*if _error_=1 then abort;*/ output; end; stop; run;
PROC PRINT data=zxs;
RUN;
结果输出:
- Set语句可以串接多个数据集,形式如下
Data 数据集;
set 数据集A 数据集B ……;
<by 变量;>
Run;
- Rename选项负责改名;in选项产生变量负责记录观测来自该数据集;
data a; input id ming $ sex $ @@; cards; 1 MARY F 3 ANN F 4 TOM M ;
data b; input id name $ sex $ @@; cards; 2 JOSE F 5 ERIE M 6 MAY F 1 MARY M
;
data result; set a(rename=(ming=name)) b(in=inb); *by id; if inb=1 then bonus=100;
run;
proc print; title'串接数据集';
run;
Merge语句
- 使用Merge语句并接多个数据集,形式如下
Data 数据集;
merge 数据集1 数据集2 ……;
by 变量;
run;
data person; input name $ sex $; cards;
MARY F
ANN F
TOM M ;
data place; input name $ city $ region; cards;
MARY MIAMI 2
ANN TAMPA 6
JOSE ERIE 5
MARY TAMPA 7
;
/*proc sort data=person;
by name;
proc sort data=place;
by name;*/
data result; merge person place; *by name;
proc print; title'DATA SET RESULT';
run;
Update语句
- Update语句用一个升级数据集中的观测来修改一个主数据集。
- Update语句一定要与BY语句一起使用,BY语句给出了合并观测时共同变量的名字
- 主数据集中的共同变量必须是单值的,即不能有两个或两个以上的观测其共同变量值相同
data a; input id name $ sex $; cards; 1 zxs m 2 zjy m 3 zm f
;
data b ; input id name $ sex $ sales; cards; 1 zxs f 34
;
data c; update a b; by id ;
run;
proc print data=c;
run;
Infile语句
- Delimiter (DLM)选项:规定一个字符替代空格作为分隔符。
- Firstobs选项 :不是从文件的第一个记录开始,而是从指定行开始读取记录
- Obs选项:规定用户想从输入文件中连续读取的最后一个记录号
data new1; infile cards delimiter=','; input x y z; cards;
1,2,3
4,5,6
;
data new2; infile cards dlm='ab';
input x y z;
cards;
1aa2ab3
4bb5ba6
7a8b9
;
run;
proc print data=new1;
run;
proc print data=new2;
run;
下面这个有点类似分列读取,第一列读取两个字符,第二列读取三个字符,剩余第三列
data abc; infile 'e:\SAS\data\数据处理\column.dat' firstobs=2 obs=3; input a $9.;
run;
proc print;
run;
1、使最外层引号括起的内容当成整个字符串输入,并去除最外层引号
2、默认分隔符为逗号
3、两个相邻的分隔符意味着前一个分隔符后的字段为缺失值
data; infile cards dsd; input x:$15. y; cards;
"i'm a student",,
;
run;
proc print;
run;
- 当行末尾数据宽度少于规定宽度时
Flowover: 默认选项,将下一条记录读入
Missover:将变量置为缺失
Truncover:将数据直接读入,不管宽度是否少于规定宽度
Stopover:系统终止数据步执行,报告出错
data;
infile 'e:\SAS\missover.dat';/*flowover missover truncover stopover pad*/
input x 5.;
run;
proc print;
run;
这是原始missover.dat的数据
输出结果:
SAS(八)SAS之DATA步--文件操作语句相关推荐
- python读取sas数据集_SAS之DATA步运行机制
相信了解SAS软件的朋友都知道,SAS主要由DATA步和PROC步组成,其中DATA步作为数据读入.清洗.整理的主要程序步,学好DATA就显得尤为重要.而了解DATA步,重中之重就得了解PDV(Log ...
- VBA-基本的文件操作语句与文件加密(加密dog)
1.基本的文件操作,如重命名,移动,删除,新建,文件大小,具体代码如下所示 Option Explicit Sub 演示() Dim strpath As String, filename As ...
- SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制...
SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和E ...
- 从程序员到数据科学家:SAS 编程基础 (06)- DATA步与PDV
在BASE SAS 中,DATA 语句用于开始一个数据步, 后续为若干DATA步特定的语句:SAS数据步结束于下一个 DATA 步或 PROC 步开始之处,或者结束于后续显式指定的RUN语句. 注意: ...
- Chapter002[SAS DATA步之全解密-01]
以下是个人对PDV的粗浅总结,希望各位高手补充指正. 什么是PDV 个人认为可以把PDV想象成一排用于存放变量值的盒子.每个盒子代表一个变量. 提交一个DATA步后,SAS会对这个DATA步进行编译, ...
- #SAS进阶-SAS宏介绍
嗯,最近在学习宏真得有点难度,不过似乎现在大体系统了解了这块知识,所以,就今晚进行一个整理归纳~ 一.宏功能 1)可以降低重复性任务的工作量,便于重复调用. 2)使程序模块化,同时便于修改宏参数,而无 ...
- sas mysql乱码_SAS 数据步 常见错误汇总之1-上
来自http://hi.baidu.com/רҵͳ��ʦ/blog/item/7dd299faf7b7ac1e6c22eb72.html SAS的DEBUG方面的内容比较少,现在我将网上的一些有关DE ...
- SAS EG ERROR:******引用越过文件结尾的页
SAS EG ERROR:******引用越过文件结尾的页 引发错误的场景 项目需要引用前期项目已经生成的SAS数据集,所以从另一个项目中下载下来,要上传到SAS服务器. 但是多次上传都报这个错误,开 ...
- 【Java文件操作(八)】将控制台输出重定向到txt文件
我的博客--Java文件操作系列 [Java文件操作(一)]递归打印文件目录 [Java文件操作(二)]删除文件夹,但保留其内部文件 [Java文件操作(三)]递归复制文件夹内所有文件 [Java文件 ...
最新文章
- Redis RDB 持久化详解
- it转正述职报告_普通员工转正述职报告范文
- RecyclerView 使用指南
- 华为全面屏鸿蒙,华为P50pro最新确认:麒麟1020+立体全面屏+鸿蒙系统,这才是华为...
- python的learn_Python_learn_1day
- Power BI for Office 365(八)共享查询
- C# 对get和set的理解
- java chain_java 8中 predicate chain的使用
- tm是什么域名_入驻天猫,需要什么条件?
- php更新数据步骤,Thinkphp5模型更新数据方法
- python linkedlist,LinkedList在python中的实现
- Android IPC(三)AIDL实现跨进程通信
- CentOS 7 安装 Weadmin(ITOSS)
- GF1_WFV(高分一号宽幅)GF6_WFV(高分六号宽幅)GF4(高分四号)CB04(中巴04星)免费下载方式简介
- flash player官网地址 建议不要下载flash.cn的
- 乐视网正式聘用刘延峰担任公司总经理 任期三年
- Android 解决程序启动时的黑屏问题
- DeFi明斯基时刻:压力测试与启示
- [SV]SystemVerilog学习笔记之struct union
- cron表达式入门_Sourcehunt:Cron管理,Hackathon入门,PHP-GUI…
热门文章
- 服务器多系统ssd寿命检测,SSD是什么?寿命如何?
- obsidian之快速拆分文件的插件note-refactor操作手册
- 双网卡共享上网详细设置图解教程(
- JVM第四篇之益处、常用java工具
- 正则表达式验证邮箱格式
- naarray查询 swift_VLOOKUP查询时为什么会出现NA?原来知道这6种解决方法这么重要...
- Linux学习-----Chapter six
- mac装机系列:每次打开iTerm都需要source bash_profile问题
- 关于Latex中生僻字显示问题
- IDF实验室 聪明的小羊