BookmarkSubscribeRSS Feed
从程序员到数据科学家:SAS 编程基础 (04)- SAS Studio / 作者:巫银良
neilyang
SAS Employee

由于SAS软件本身具有巨大的商业价值,一般的人很难获得最新的安装拷贝。那我们该如何学习SAS编程呢? SAS 考虑全球不断增长的分析产业人员需求,推出了基于SAS 私有云的SAS Studio 应用服务 SODA。

 

SODA 全称SAS® OnDemand for Academics是 SAS 为学术群体提供的免费在线的应用服务环境。运行在SODA上的SAS Studio可以让您在任何地方任何时间、任何地点编写/运行您的SAS代码。所有数据和代码都会存储在SAS私有云!这是目前学习使用SAS程序开发成本最低最快捷的方法——除非你在本地已经安装强大的SAS开发环境。

 

下面就让我们带上一个电子邮箱帐号+网页浏览器一起出发吧…

 

  1. 【注册用户】:在浏览器中输入网址:https://odamid.oda.sas.com/SASODARegistration ,提交用户名来注册SAS® OnDemand for Academics (SODA)账号,你的邮箱将会收到用户ID,该用户ID会在后面用来登陆 SODA 控制中心,使用SODA提供的应用服务

 

neilyang_0-1601257329247.png

 

 

  1. 【登录云端】:注册完成后,通过网址https://odamid.oda.sas.com 访问SODA控制中心。此时需要您的【用户ID和【用户密码】。注意:这儿的【用户ID】 并非你的邮箱地址,而是SODA给你分配的用户ID (比如 yinliangwu0)其界面如下:

 

neilyang_1-1601257329271.png

 

 

登录完毕后,系统将引导你到SAS ODA 的控制中心。页面上你将会看到一个 SAS® Studio 应用。点击它登录应用即可。

neilyang_2-1601257329279.png

 

 

你也可以登录 SAS ODA 控制中心后直接在浏览器中输入如下网址访问 SAS Studio https://odamid.oda.sas.com/SASStudio。目前SODA提供服务的SAS Studio 为3.5 企业版,支持Chrome27+,IE9-11, Firefox 21+ 和 Apple Safari 6.0+ 以上的浏览器。后台SAS为Linux 64位版本。SAS Studio 为用户提供一个编写/执行SAS程序、简便高效的Web开发环境。

 

 

  1. 【开发程序】登录SAS Studio后,其主界面包括上面的菜单栏、左侧的导航面板和右侧的内容窗口,导航面板“服务器文件和文件夹”、“任务和实用程序”、“代码段”、“逻辑库”、“文件快捷方式” 和 “SAS文件夹” 等内容。其中“服务器文件和文件夹”和“逻辑库” 比较常用。服务器文件和文件夹是你在服务器上的磁盘空间,一般映射到你的主目录 /home/<userid> 上。

 

neilyang_3-1601257329284.png

 

 

右侧提供了程序窗口,包括 “代码”,“日志“ 和 “结果” 三个窗口。一般步骤是在代码窗口中输入SAS程序,然后点击代码页签工具栏最左边的运行按钮、或者直接按键盘上F3功能键直接执行代码。比如:

 

neilyang_4-1601257354862.png

 

 

执行结果可以查看日志窗口,比如:

 

neilyang_5-1601257354870.png

 

 

结果窗口是用来输出 ODS 结果的,我们可以在程序中输入如下代码,然后按 F3 运行SAS代码即可看到有ODS输出结果的情形。

 

proc print data=sashelp.class;

run;

 

neilyang_6-1601257354877.png

 



在分析中你可能需要上传自己的数据文件,你可以右键点击左侧导航面板中的 “文件(主目录)”,然后在菜单中选择 上载文件…”

neilyang_7-1601257354883.png

 

 

在如下弹出对话框中选择 “选择文件”,然后选择你本地电脑上的数据文件,比如 c:\temp\class.csv ,即可将文件上传到您的服务器上。

 

neilyang_8-1601257354889.png

 

 

上传完毕在左侧的导航面板“文件(主目录)”中将出现 class.csv 文件,表明该文件已经传到云端。如果要将该csv数据导入到SAS 系统中,我们可以双击它,SAS Studio会自动给您生成对应的SAS Code来导入数据。你也可以选择不同的参数来进行数据导入。

 

注意,云端的SAS环境为了给全球所有的用户使用,为支持所有语言和地区的用户,默认的数据文件编码是UTF-8。而我们中文 Windows环境上生成的中文数据默认是GB2312编码,我们可以使用记事本另存为,选择UTF-8编码的方式来完成转码。

比如,如果我们上传一个本地 Windows 导出的csv文件,而在SAS导入的时候会默认为我们上传的是 UTF-8 格式的文件,此时就会出现乱码的情况。解决方法是:a) 我们手工用记事本或其他工具将数据文件转码;b)我们明确告诉SAS我们的数据文件的编码是 GB2312。导入到运行在云端的SAS内部后,所有的数据集默认都是 UTF-8 编码的。

 

如果我们是 Windows 导出的 csv 文件,需要指定数据源文件是 gb2312。如下步骤:

双击class.csv,然后在右侧class 页签下点击 “编辑”,SAS Studio会自动给你生成新的SAS代码 “程序2”。运行即可正确导入数据。

neilyang_9-1601257354896.png

 

neilyang_10-1601257354903.png

 

 

在结果窗口中可以看到导入完毕的数据,比如数据集名称 WORK.IMPORT1。缺省情况下输出数据都会放在临时逻辑库 WORK 中。

neilyang_11-1601257376637.png

 



neilyang_12-1601257376645.png

 

 

我们可以通过鼠标右键点击左侧导航栏下的“逻辑库/我的逻辑库/WORK/IMPORT1” 来重命名数据集,比如改为 WORK.CLASS。

neilyang_13-1601257376654.png

 

 

这样,我们就可以在本次SAS会话期间(即本次登录 SAS Studio 期间)一直使用 WORK.CLASS数据集。修改代码为如下:

proc print data=work.class;

run;

 

运行代码我们将看到打印的数据变为我们刚上传、然后导入的那个数据集 WORK.CLASS.

 

neilyang_14-1601257376660.png

 

 

我们可以将我们的程序保存到服务器上,比如我们选择保存到 “文件(主目录)”,文件名为 PrintClass.sas

neilyang_15-1601257376665.png

 

 

实际上,该文件保存到了服务器上的文件 /home/yinliangwu0/PrintClass.sas 中。

neilyang_16-1601257396599.png

 

 

由于 WORK 是临时逻辑库,在SAS会话结束时系统会自动删除。如果我们要在服务器磁盘上永久保存该临时导入的数据集 WORK.class,我们可以在导入之前指定一个非临时逻辑库来保存数据、或者如下:我们新建一个逻辑库 mylib ,然后在 mylib 中生成一份WORK.CLASS的拷贝。如下:

libname mylib “/home/yinliangwu0”;

 

data mylib.class;

   set work.class;

run;

 

这样我们就可以将我们的打印class 代码改为:

proc print data=mylib.class;

run;

 

neilyang_17-1601257396606.png

 

 

运行上面的代码后,我们可以看到服务器的“逻辑库/我的逻辑库” 中多了 MYLIB,其中还包括数据 CLASS。

 

neilyang_18-1601257396614.png

 

 

其对应的物理文件就是:服务器 odaomr.oda.sas.com 的 /home/yinliangwu0/class.sas7bdat

neilyang_19-1601257396621.png

 

 

这样,我们完成了上传数据集,并将数据保存在了非临时逻辑库。同时也在服务器上编写完了SAS 程序 PrintClass.sas,我们就可以随时注销,关闭SAS Studio 应用了。

 

鼠标点击右上角的 “注销” 菜单即可。

neilyang_20-1601257396628.png

 

 

安全退出后应关闭浏览器。

neilyang_21-1601257423294.png

 

 

由于所有数据都保存在云端,因此你下次登录时所有的数据和程序都还在,你可以随时继续你的分析工作… 也可以随时保存工作并退出!

neilyang_22-1601257423301.png

 

 

  1. 以下分享若干提示信息:
    1. 检查SAS Studio 和后台SAS平台的版本信息:点击右上角?号,然后选择“关于 SAS® Studio” 即可查看。

 

neilyang_23-1601257423308.png

 

 

  1. 查看系统默认的文本编码:从右上角“其他应用程序选项”按钮入口,选择 参数选择->常规-> 默认文件编码:UTF-8 ,该选项设定读取/保存 SAS 程序代码的默认编码。我们在中文平台上创建的SAS程序文件默认编码为 GB2312。而SAS SODA 系统默认采用 UTF-8 处理文件读写和数据处理,因此建议上传文件/上传代码之前确保文件编码为 UTF-8 编码。记住,该选项并不影响我们前面提到过的导入数据功能,因此即使在此修改此文本编码为 GB2312,也不会修正从客户端上传的GB2312编码的数据导入到SAS系统环境中,因为 GB2312和系统默认会话编码 UTF-8 之间的不一致问题。

 

neilyang_24-1601257423313.png

 

 

  1. 在参数选择中 “启用提示” 可以改善我们的程序编辑器行为,从而让我们可以在进行 SAS 编程的时候获得必要的提示信息(如下图)。

 

neilyang_25-1601257423319.png

 

 

neilyang_26-1601257423326.png

 

 

  1. 在SAS Studio 中利用 “代码段” 可以让我们方便地重用一些代码片段,比如我们可以在代码编辑窗口中任意选中某些代码(如下蓝色部分),然后点击工具栏“添加至我的代码段” 按钮,即可命名特定代码片段。

neilyang_27-1601257423332.png

 

neilyang_28-1601257423337.png

 

 

这样我们在新建另一个SAS 程序的时就可以很方便地在程序编辑器中 “双击” 添加左侧选中的代码片段了。比如下面我们编写的一个简单的对 mylib.class 的数值变量计算平均值和极差的程序,需要插入DisplayLogo 信息。

 

libname mylib "/home/yinliangwu0";

 

proc means data=mylib.class;

  var age weight height ;

run;

 

运行我们的代码然后保存到 MeansClass.sas中:

neilyang_29-1601257423344.png

 

 

  1. 创建自动执行代码:SAS支持在系统启动时自动执行某些程序,比如我们希望保存在磁盘特定目录的数据,在每次我们登录到SAS工作环境的时候可以用于分析,我们可以将 libname 语句加入到 AutoExec文件中。

neilyang_30-1601257423350.png

 

 

相应地,代码中 libname mylib "/home/yinliangwu0"; 就可以注释掉了。

neilyang_31-1601257423356.png