您的位置:首页 > 职场人生

从程序员到数据科学家:SAS 编程基础 (03)

2017-04-26 00:36 218 查看


SAS 编程需要使用什么样的开发环境?其实,跟任何恰计算机语言一样,你可以用任何纯文本编辑器编写 SAS 代码,比如 Windows 平台的记事本,NotePad++,你也可以使用 Unix 上的vi 来编辑代码。不过需要注意的是,Windows 上使用回车换行 CRLF而 Unix 使用 LF 来换行。

如果你要运行调试 SAS 代码,则需要安装SAS运行环境SAS Foundation;你也可以安装更加高级的 Windows 桌面客户端 SAS
Enterprise Guide,或者使用Web 客户端 SAS Studio来远程提交执行代码。

不管哪一种窗口界面,安装完毕后大体都会有三个窗口:编写/提交 SAS 代码的 [编辑] 窗口,查看SAS 代码运行细节的 [日志] 窗口,显示输出结果的 [输出] 窗口。





在代码窗口中输入如下代码,然后点击菜单 [运行(R)]à[提交(S)] 或者直接点击工具然上面的运行按钮,就可以在日志窗口中看到提交代码的细节和执行结果:在 [日志] 窗口中输出Hello
World!

Data _null_;
    put "Hello World!";
run;

在SAS 代码提交编译运行时,SAS 会检查语法错误,并将语法错误输出到日志窗口中。语句中常见的语法错误包括的关键字拼写错误,无效选项,引号不匹配,或者语句结束符分号缺失等。

语法错误信息包括出错的行列,以及错误的详细描述,显示在Log窗口中。语法错误包括ERROR和WARNING两大类,分别以红色和绿色显示。由于SAS具有强大的拼写错误容错能力,SAS能够智能修正的错误被归入WARNNING类错误,代码依然能正常运行。而红色表示SAS 未能修正的错误,用户必须修正后才能正常执行。比如:

procx printx datax=sashelp.class;
run;





但对于一些参数错误,比如指定了不存在的数据集 sashelp.classx,SAS会以 ERROR显示。

59   proc
print data=sashelp.classx;
ERROR: 文件“SASHELP.CLASSX.DATA”不存在。
60   run;

注意:有时正是因为 SAS 运行环境对代码的容错能力太强,有些错误会隐藏得较深,并不能立马发现。我们可以采用分块调试的办法将语法错误限制在最小的范围内。比如:title "Hello World; SAS 只在第三次提交的时候才会报告错误。

SAS 程序编译之后,SAS扫描整个步骤,在到达 Step边界时如果没有语法错误则执行该步骤,直到整个SAS程序被处理完毕。

当代码编辑窗口激活时,你可以随时点击菜单 [文件(F)]à[保存(S)] 来保存您的代码。代码缺省以对应语言的编码(比如 中文是 Simplified
Chinese (EUC) )来保存。你也可以在保存代码对话框中指定Unicode UTF-8, UTF-16LE或 UTF-16BE编码格式,有/或者没有字节顺序标记的方式存储SAS 程序。

小知识:字节顺序标记BOM就是告诉文件读/写程序在文件最开始的2或3字节处有特殊值:EF
BB BF,FF FE,FE FF 分别表示UTF-8,UTF-16 Little Endian和 UTF-16
Big Endian。

你可能有疑问,为什么输出窗口竟然没有任何输出。与我们传统编程的I/O不同,SAS 的输出窗口是给前面提到的SAS输出传送系统ODS的LISTING 目标用的。上面的代码中没有任何ODS 输出,自然输出窗口中没有结果。让我们尝试创建一个数据,然后将数据打印到该窗口中:

/* InsideSAS
 * Ex1: output to ODS LISTING;
 */
data mydata;
    Name="Yinliang";
    Sex='M';
    Age=30;
    Height=175;
    Weight=83.5;
run;
 
ods _all_ close; *Close
all ODS Destination;
ods listing; *Open Listing Destination;
 
proc print data=mydata;
run;

提交代码执行后,输出窗口会打印用户创建的数据集 work.mydata, Work 是当用户没有显式指定时,SAS 运行时默认的 SAS 工作库。





在输出窗口,SAS 会打印出用户新创建的数据集 WORK.MyData





如果需要查看SAS 数据集的数据结构和定义,可以使用 PROC CONTENTS.比如:

proc contents data=mydata;
run;

执行结果将显示在输出窗口中。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sas