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

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

1. 各种循环与控制
DO组     创建一个执行语句块
DO循环        根据下标变量重复执行DO和END之间的语句
DO WHILE    重复执行直到条件为假则退出循环
DO UNTIL    重复执行直到条件为真则退出循环
DO OVER     对隐含下标数组元素执行DO/END之间的语句
END         退出DO或SELECT语句的标志
SELECT      选择执行SAS语句
IF-THEN/ELSE有条件执行一个SAS语句
GO TO       使SAS语句跳转到GO TO语句后面,继续执行其他语句
RETURN      不和LINK语句连用时。跳转到DATA步开头;和LINK语句连用时,跳转到LINK后面的语句。
CONTINUE    停止DO循环中当前循环,跳转到DO语句继续执行下一次循环,只能用在DO循环。
LEAVE       跳出当前DO循环或SELECT组,继续执行后面的DATA步。可用在DO循环或SELECT.
2. SELECT - WHEN 顺序执行WHEN,当第一个WHEN为真跳出,或者执行OTHERWISE,否则报错。
实践:拉直数据集
    libname chapt6'f:\data_model\book_data\chapt6';
    data fishdata4;
        set chapt6.fishlength(keep=location data_name_measurement);
        by location date;
        array tr[1:4] length1-length4;
        retain length1-length4;
        if first.date then do i=1 to 4;
            tr(i)=0;
        end;
        select(_name_);
            when('length1')length1=measurement;
            when('length2')length2=measurement;
            when('length3')length2=measurement;
            when('length4')length2=measurement;
            otherwise;
        end;
        if last.date;
        keep location date length1-length4;
    run;
3. DO循环
WHILE|UNTIL
WHILE语句执行之前被计算,条件真。DO WHILE语句是的当条件为真时重复执行DO组中的这些语句。 
UNTIL语句执行之后被计算,条件为真。DO UNTIL语句连续执行DO组中的语句块直到UNTIL条件为真时退出循环。
4. DO OVER语句实践:
求最大值对应的变量
    data a;
        input v1 v2 v3 @@;
        datalines;
        1 2 3 1 4 5 2 4
    data b;
        set a;
        _tem=max(of v1-v3);
        array arr v1-v3;
        do over arr;
        if arr=_tem then v4=vname(arr);
        end;
        drop _tem;
    run;
5. 在DATA步的其他地方,RETURN语句使得SAS系统返回到DATA步开头(常用)。
6. SAS常用全程语句
全程语句是可以用在一个SAS程序脚本中的任何地方的语句。可以用在数据步,也可以用在过程步,甚至可以单独使用。

常用的全程语句
COMMENT     作为其他SAS程序的一种解释或者屏蔽功能
X           发布主机操作系统命令,如DOS命令
LIBNAME     定义SAS逻辑库
FILNAME     标记一个外部文件
%INCLUDE    从外部文件等调出SAS语句和数据行
TITLE       输出打印的标题行
FOOTNOTE    输出打印的脚注行
OPTIONS     改变SAS默认的系统选项
7. FILENAME语句
发送程序运行结果到EMAIL
    filename outbox email
        to='sendname@company.com'
        type='text/html'
        subject='Test Subject';
    ods html body=outbox/*Mail it!*/;
    title 'Here is tile';
    proc print data=sashelp.class;
    run;
    ods html close;
程序中,filename定义一个email邮件,包括发送对象、发送文件类型和发送主题。然后通过ods html方式输出数据集class到指定对象的邮箱中去。

抓取某个网页的源代码
    filename ws url "http://www.sas.com";
    data sas;
        infile ws length=len lrecl=4000;
        input record $varying4000.len;
    run;
捕获SAS门户网站源码,并导入到SAS数据集中去,在Web文本挖掘中,常用。
8. 输出控制
SAS系统的输出时执行SAS程序的结果。主要包括如下三点:
    LOG(日志窗口):主要输出程序运行过程中产生的日志。
    OUTPUT(输出窗口结果):主要是SAS过程步运行产生图表结果。
    GRAPH(图形窗口):主要是SAS过程步运行产生的图行结果。
实际上SAS系统与外部其他系统进行数据交换,如运行结果输出到Excel、变成SAS数据集等,都需要SAS另外一个重要的输出控制方法ODS(输出文件系统)来控制。
其中,在输出文件格式中,除了DATA步和PRINTTO过程步主要输出TXT文件外,其余文件格式均由ODS方法产生。
9. ODS输出目标、输出对象如下:
    输出目标(管道)    含义
    LISTING         字符文本在OUTPUT窗口显示、图形在GRAPH1窗口显示
    RESULTS         输出结果在结果窗口显示
    OUTPUT          把OUTPUT窗口的显示内容(输出对象)转换成SAS数据集
    HTML            把OUTPUT窗口的显示内容(输出对象)转换成HTML文件
    CSVALL          把OUTPUT窗口的显示内容(输出对象)转换成含有逗号的标记语言文件
    RTF             把OUTPUT窗口的显示内容(输出对象)转换成RTF文件
    PDF             把OUTPUT窗口的显示内容(输出对象)转换成PDF语言文件
    其他第三方格式 对应的第三方格式文件
输出对象            含义
由SAS过程步创建       一个输出对象的属性主要包含对象名称、对象属性、对象标签和对象路径

ODS实践:
输出过程步中UNIVARIATE所有输出对象--对象名称,对象标签,对象模板,对象路径
    ODS TRACE
        ods trace on;
        proc univariate data=sashelp.class;
        class sex;
        var age;
        run;
        ods trace off;
ODS EXCLUDE:是SECLECT的逆向操作,即在输出目标中排出要输出的对象。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2635
来自专栏一个爱瞎折腾的程序猿

sqlserver使用存储过程跟踪SQL

USE [master] GO /****** Object: StoredProcedure [dbo].[sp_perfworkload_trace_s...

2040
来自专栏张善友的专栏

Miguel de Icaza 细说 Mix 07大会上的Silverlight和DLR

Mono之父Miguel de Icaza 详细报道微软Mix 07大会上的Silverlight和DLR ,上面还谈到了Mono and Silverligh...

2707
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

5287
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏hbbliyong

WPF Trigger for IsSelected in a DataTemplate for ListBox items

<DataTemplate DataType="{x:Type vm:HeaderSlugViewModel}"> <vw:HeaderSlug...

4064
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2547
来自专栏杨龙飞前端

scrollto 到指定位置

2494
来自专栏飞扬的花生

jsencrypt参数前端加密c#解密

      写程序时一般是通过form表单或者ajax方式将参数提交到服务器进行验证,如何防止提交的请求不被抓包后串改,虽然无法说绝对安全却给非法提交提高了难度...

3859
来自专栏我和未来有约会

Silverlight第三方控件专题

这里我收集整理了目前网上silverlight第三方控件的专题,若果有所遗漏请告知我一下。 名称 简介 截图 telerik 商 RadC...

3985

扫码关注云+社区