(二)SAS语言

1、概述

基本概念:SAS语言的基本单位是语句;多条SAS语句构成一个SAS程序(文件后缀 .SAS)

(1)语句构成:关键词+SAS名称+特殊字符、运算符;(关键词由系统定义的、有确定含义的符号。一般位于句首,用以说明语句的类型和功能)

语言书写规则:

语句可以从某一行的任意位置开始;
一条语句可以写成几行;
一行可以写几条语句;
不区分大小写;
注释语句的两种格式: /* 注释内容 */      * 注释内容;
(2)程序构成:一个SAS程序就是由0个或若干个数据步、过程步组成,有时还包括一些全程语句用以贯穿控制整个SAS程序的某些选项、变量或程序运行的环境

数据步 :以关键词DATA开始,通常用于创建SAS数据集,对数据进行处理,如计算、挑选。输出形式为SAS数据集或报表等,也可以将结果写到日志窗口或外部文件中。

过程步:以关键词PROC开始, 通常用于分析和处理SAS数据集中的数据,绘制图表,展现数据集的信息等功能。

全程语句:位于数据步和过程步之外,例如:TITLE语句用于指定标题;OPTION语句用于规定系统运行的一些选项。

SAS程序结束语句:RUN;单击工具栏“提交”按钮,或单击热键F8,或选择菜单 “运行”/“提交”命令进行程序的运行。

2、数据步即data步

(1)用DATA步创建数据集

两种方式:自定义创建数据集;外部文件创建数据集

*/
方式一:直接创建,[]表示可省略内容
DATA [逻辑库名.]<创建的数据集名>;
INPUT <变量名1>[$] <变量名2>[$]… <变量名n>[$][@@];  *定义变量,@@ 便于接着读入后续的数;
[其他数据步语句];
CARDS;
d11 d12 …d1k                                      *变量赋值
d21 d22 …d2k
…. …
[ ; ]                                             *分号单独占用一行;
RUN;
*/*案例;
data temp1;
input name$ age@@;
cards;
Tom 34 johny 22 mary 34
Susan 26 Dora 29 Young 30
;
run;*/方式二:外部数据导入的方式
DATA <数据集名>;
INFILE '<文件路径>';                               *注意文件路径加引号;
INPUT <变量名1> [$]<变量名2>[$]… <变量名n>[$];      *定义变量
RUN;
*/*案例;
data temp2;
infile ‘d:\mydata\stud.txt’;
input id $ name $ sex $ age hometown $ ;
run;

其中DATA语句 [格式] 逻辑库名.数据集名;[功能] 标志数据步的开始,并定义新建数据集的名称。

INPUT语句 [格式] 下方详细阐述;[功能] 为相应数据定义变量; 告知SAS如何读取数据

CARDS语句 [功能] 表明后面是数据行;cards必须与input配合使用;一个data步中只能使用一个

INFILE语句  [格式] input ‘文件路径’;[功能] 用于从外部文件读入数据,必须出现在INPUT语句之前。 文件路径中不包含变量名,使用反斜杠,“/”

延申:从外部数据导入数据集

data;
infile "sales2.txt" dlm="," firstobs=2;  *dlm表示数据用什么分割,firstobs从第几行开始录入数据;
input storeid $9. Q1-Q4;                 *7. 字符长度;
RUN;

(2)定义变量语句即INPUT语句

格式:input 变量名1 [变量输入格式1] [列标识符] ... 变量名n [变量输入格式n] [列标识符][@@]

@@表示cards后的数据是可以依次读取的,不用写换行符

  • 自由格式

    data work.score;
    input id $ name $ Math Chinese English;
    cards;
    201501001 周国兴 90 80 85
    201501002 李铭 70 78 81
    201502003 彭晓钢 92 89 86
    201502004 胡大伟 80 90 95
    201502005 陈小寒 65 85 78
    201503001 代平安 88 75 88
    run;

    在INPUT语句的变量名应和数据列表中的列数一一对应。 数据每行为一个观测,各数据值之间用空格或制表符分隔;如果存在缺失数据,无论是字符型还是数值型都要用小数点 (.)表示;字符型数据长度不能超过8个字符,中间不允许有空格,开头和结尾如果有空格将被忽略。

  • 列标识格式

    *值包含空格;
    data stud_space;
    input id $ 1-9 name $ 12-24 math 26-28;
    cards;
    201531001 Tom Welis 92
    201531002 Jack Swift 85
    ;
    run;*值没有空格;
    data CarInfo;
    input num 1-3 month $ 4-6 year 7-10 id $ 11-16;
    cards;
    001jan2015BJ9078
    002jan2015HK8559
    003jan2015NY5576
    run;
    

    列标识格式的好处: 变量可以根据需要从任何位置按顺序读取: 字符型变量可以读入中间含有空格的字符型数据;可以读取没有分隔符号但是格式整齐的数据;可以超过8个字符长度!

(3)定义变量时的数据格式

SAS变量的输入、输出格式的一般形式:[$]格式名<w>.<d>
$: 字符型格式的前缀;w:总宽度;d:数值型变量小数点后的位数


(4)定义变量属性语句即ATTRIB语句
[格式]

ATTRIB 变量名1 [FORMAT=格式] [INFORMAT=输入格式] [LABEL='标记内容'] [LENGHT=[$]长度]

变量名2 [FORMAT=格式] [INFORMAT=输入格式] [LABEL='标记内容'] [LENGHT=[$]长度]

...;

Title ‘2015级学生名单’;
data stud;attrib id length=$9. label="学号"
name label="姓名"
gender label="性别"
age label="年龄"
hometown label="籍贯"length=$20.;input id$ name$ gender$ age hometown$;
cards;
201501001 周国兴  男   19   长沙
201501002 李铭    女   18   广西壮族自治区
;proc print data=stud; /*proc step */
run;

(5)赋值语句

[功能] 将<表达式>的值赋给左边的<变量>,可以对变量作变换和赋值,创建新变量,计算新数值以及控制条件语句的运行等。

[格式] <变量名>=<表达式>;

  • SAS表达式由一系列运算符和运算对象构成,被执行后产生一个目标值。
  • 运算对象包括常量、变量、SAS函数。
  • 运算符包括算术运算符、比较运算符、逻辑运算符、特殊运算符和括号。

SAS常量有:字符常量、数值常量和日期时间常量。
1)字符常量: 字符常量是由引号括起来的字符串,最多可达32767个字符。字符常量是区分大小写的,“TOM”和“tom”是不同的字符常量。
例如:‘123’ name=“TOM”;

data class1;
set sashelp.class;
keep name sex age ;    /*字符变量后不带$*/
if sex=“女”;           * "女"表示字符常量;
run;

2)数值常量, 例如:1 -5 1.23 
3)日期、时间常量
日期/时间常量是将日期/时间由单引号括起来,并在后面加上 d(日期常量)或 t(时间常量)或 dt
(日期时间常量)。例如:’1jan2015’d ‘10:15’t ‘ 6Jun11:12:25’

4)算术运算符:+(加),-(减),*(乘),/ (除), **(乘方)

5)关系运算符:
①=, EQ equal to 等于
②^=, NQ not equal to 不等于
③>, GT great than 大于
④<, LT less than 小于
⑤>=, GE great than or equal to 大于或等于
⑥<=, LE less than or equal to 小于或等于

6)逻辑运算符:^ NOT 逻辑非、& AND 逻辑与、| OR 逻辑或

7)特殊运算符
①数值><数值  (MIN)  取最小值  eg:min=4><8 
②数值<>数值  (MAX) 取最大值
③||(Join)连接两个字符值
④IN属于  如:hometown in (‘北京’,’上海’,’武汉’)

(6)put语句

[功能] PUT语句将输出信息显示在LOG窗口。
[格式] PUT [@ 指定列] [变量] [$] [起始列-末列] [@];
其中, [@ 指定列] 将指针移到指定列
[@];指针保持在当前行

(7)SET语句

[功能] 1. 数据集的复制与修改 2. 拆分数据集 3. 纵向合并数据集

功能1、SET语句把一个已有数据集复制到一个新数据集,同时可以进行修改

[格式]

DATA [<新数据集名1>];
SET <已有数据集名1>;

[keep/drop 变量名1 变量名2...]

[if/where等]

run;

data class1;
set sashelp.class;
keep name sex age ;/*字符变量后不要带$*/
if sex=“女”;
run;

功能2、拆分数据集,按某拆分条件,把一个已有数据集分别存放到不同的数据集

横向拆分:SET语句和OUTPUT语句

[格式]

DATA [<新数据集名1>][<新数据集名2>];
SET <已有数据集名1>;

if 条件 then output 新数据集名1;

if 条件 then output 新数据集名2;

run;

纵向拆分:SET语句和keep/drop语句

data 新数据集名 (keep/drop = 变量)
         新数据集名 (keep/drop = 变量);
set  原始数据集;
run;

data boy girl;
set sashelp.class;
if sex=“男” then output boy;
if sex=“女” then output girl;
run;data s1(keep=sex )s2(keep=name);
set sashelp.class;
run;

功能3、用set语句把几个结构相同的数据集上下地连接,形成一个新的数据集,新的数据集的观测数是原来几个数据集观测数的总和。

[格式]

DATA <新数据集名1>;
SET <已有数据集名1> <已有数据集名2>;

Data ALL;
Set boy girl;
Proc print data=ALL ;
Run;

延申:

单个数据集

方法一
data 新数据集名;
set  原始数据集(keep/drop = 变量);
run;
或者
data 新数据集名 (keep/drop = 变量);
set  原始数据集;
run;
方法二
data 新数据集名;
set 原始数据集名
keep/drop 变量;
run;

两者的差异:set是数据读入pdv的一个过程,方法一 数据读入程序数据向量PDV只读入keep后的变量,方法二 读取全部,方法一 还能获取多个数据集,推荐方法一

(8)MERGE语句:横向合并数据集(类似sql中的全连接)

[功能] 将两个或多个SAS数据集的观测横向匹配合并成一个新数据集的一个观测。

[格式]

DATA <新数据集名>;
MERGE <已有数据集列表> ;
BY <变量1>[<变量2>…];          *数据集的共同变量;
RUN;

??前提是需要排序吗?

(9)IF语句

[功能] 仅对符合条件的观测值进行处理;

[格式]

格式一:IF <条件或表达式>THEN <语句>;
                    [ ELSE <语句> ];
格式二:IF <条件或表达式>;

(10)WHERE语句 -条件语句(比IF语句效率更高)

DATA步中的WHERE语句包含一些特殊的运算符,这些运算符只能用于WHERE表达式中
•Is missing | is NULL : 选择变量值为缺失值的所有观测;
•LIKE : 字符串比较运算符,可以使用通配符号:
“%”:表示任意字符串
“_”:表示任意单个字符
•BETWEEN m AND n: 选择变量值介于[m,n]间的观测。

data Li1 ;
set sashelp.class;
Where name like “_丽%”;
run;*where between and用法;
data test1;
set sashelp.airline;
WHERE AIR BETWEEN 100 AND 110;
run;

(11)select语句(类似case when)

格式一:
SELECT;
WHEN (条件) 语句;
WHEN(条件) 语句;
……
[ OTHERWISE 语句;]
END;
格式二:
SELECT (选择表达式);
WHEN(值列表) 语句;
WHEN(值列表) 语句;
……
OTHERWISE 语句;
END;

Data boy girl;
set sashelp.class;
select ;
when (sex=“男” ) output boy;
when (sex=“女” ) output girl;
otherwise put sex= '有错';
end;
Run;

(12)循环语句

DO循环的语法格式:
DO <计数变量>= <起始值> TO <结束值> [BY 步长];
循环体……;
END;

data hat;
do x=-5 to 5 by 0.25;
do y=-5 to 5 by 0.25;
z=sin(sqrt(x*x+y*y));output;
end;
end;
run;

(13)FILE语句

[功能] 定义一个外部文件作为当前的输出文件,以供PUT语句将数据输出到该文件中去
•File ‘全路径文件名’; /* 将PUT语句的输出写入指定文件*/
•File log; /* 指定把put语句的输出送到日志窗口*/
•File print; /* 把put语句的输出送到输出结果窗口*/

Data;
FILE “C:\SASDATA\RESULT.TXT”;
A=99;
PUT @10 A;
RUN;

小结:

Data步 建立数据集的两种方式:数据直接输入:INPUT,CARDS;数据来自外部文件:INFILE,INPUT

定义变量属性的语句:LABEL,LENGTH,FORMAT,INFORMAT,ATTRIB 定义日期时间的输入格式

赋值语句:常量、变量;运算符:算术、关系、逻辑、特殊;函数:字符串处理、数值计算、日期处理等

SET/MERGE语句:SET三个功能、OUTPUT语句、MERGE横向合并

其他Data步语句:IF分支选择、SELECT多分支、DO循环、WHERE条件、独有运算符、FILE语句、PUT语句

sas入门-笔记2 SAS语言相关推荐

  1. sas入门-笔记4 描述性统计分析

    (三)描述性统计分析 统计学是通过样本数据研究总体数据的一门学科 对数据进行频数统计.计算特征统计量和将数据图形化的过程称为描述统计. 目的:获得对数据的总体感觉以及评估数据质量 实现方式 用表格工具 ...

  2. sas学习笔记之sas发送邮件

    sas发送邮件 #sas 初学者之如何在不打开邮箱的前提下发送邮件 /*这是基本固定模块*/ options emailsys='smtp' emailauthprotocol='login' ; e ...

  3. SAS初学者笔记---001

    SAS初学者笔记---001 sas界面介绍 001 顶部菜单栏 002 results与explorer 003 主窗口部分 sas代码执行规则 关于SAS程序执行的步骤 代码格式 这是一篇关于SA ...

  4. SAS学习笔记之《SAS编程与数据挖掘商业案例》(4)DATA步循环与控制、常用全程语句、输出控制...

    SAS学习笔记之<SAS编程与数据挖掘商业案例>(4)DATA步循环与控制.常用全程语句.输出控制 1. 各种循环与控制 DO组 创建一个执行语句块 DO循环 根据下标变量重复执行DO和E ...

  5. 《SAS 统计分析与应用从入门到精通(第二版)》一第1章 SAS for Windows入门1.1 SAS简介...

    本节书摘来自异步社区<SAS 统计分析与应用从入门到精通(第二版)>一书中的第1章,第1.1节,作者汪海波 , 罗莉 , 吴为 , 孟玲 , 杨世宏 , 汪海玲,更多章节内容可以访问云栖社 ...

  6. python语言支持函数式编程_Python语言之Pyhton入门笔记函数式编程

    本文主要向大家介绍了Python语言之Pyhton入门笔记函数式编程,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. 一,匿名函数 def add(x,y) return x+y ...

  7. Java快速入门学习笔记9 | Java语言中的方法

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  8. Java快速入门学习笔记8 | Java语言中的数组

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

  9. Java快速入门学习笔记7 | Java语言中的类与对象

    有人相爱,有人夜里开车看海,有人却连LeetCode第一题都解不出来!虽然之前系统地学习过java课程,但是到现在一年多没有碰过Java的代码,遇到LeetCode不知是喜是悲,思来想去,然后清空自己 ...

最新文章

  1. AddressSanitizer+cmake
  2. 联想重启乐檬?5G时代手机双品牌战略带来变局
  3. 写jsx_一种让小程序支持JSX语法的新思路
  4. 示波器DIY参考设计
  5. 被困69天后,智利矿工重返人间
  6. C#中类的属性(Property)
  7. Java基础学习总结(48)——Java 文档注释
  8. SLAM_怎么评价slam建图效果
  9. java book_java_book java 图书管理系统 GUI - 下载 - 搜珍网
  10. sap abap开发从入门到精通_给你的ABAP对象打上标签(Tag)
  11. iOS 在线下载字体
  12. 穷举法破解密码-方法详解
  13. 刚买的新电脑win10系统卡的不行,谷歌浏览器搜索贼慢
  14. matplotlib使用笔记
  15. springboot调用第三方邮箱发送邮件过程详解
  16. Windows装机方案
  17. nrm 切换不同的源工具
  18. 反病毒引擎设计之虚拟机查毒篇
  19. FL Studio 20 学习笔记
  20. 用途相似的标签:cite,q与blockquote

热门文章

  1. 三校生计算机题目及答案,“三校生”对口升学计算机应用试卷计算机基础知识(含答案)...
  2. iOS播放器、Flutter高仿书旗小说、卡片动画、二维码扫码、菜单弹窗效果等源码...
  3. 欺骗的艺术:为何Tor大陆被禁止,为何俄罗斯美国成漏洞榜一二,网络安全带你揭秘...
  4. 核聚变技术的实现,会给人类带来什么?
  5. PostgreSQL11 MYSQL_postgresql11 备份
  6. root天猫,天猫盒子root
  7. 程序员如何解决中年危机?web前端开发工程师简历模板
  8. 电路设计和电气识图知识点是相互关联的,PLC上位机入门应该知道
  9. RSA2048签名和加密+OAEP填充方式(前端)
  10. bilibili用户信息爬虫(全网最全)