4月 1, 2011

Posted in 分享 | 8 条评论

SAS中dataset行列转换

之前saslist.net分享了一个SAS面经,其中提到对dataset进行行列转换有两种方法:1.proc transpose过程步;2.do循环+array statement。对于这个常见问题,姚志勇编写的《SAS编程与数据挖掘商业案例》中(P104-106)也有讲解,摘录如下:

数据集chapt6.fishdata如下

根据chapt6.fishdata将列转换成行:

1
2
3
4
proc transpose data=chapt6.fishdata out=chapt6.fishlength(rename=(col1=measurement));
	var length1-length4;
  	by location date;
run;

继续阅读
2月 20, 2011

Posted in 数据处理 | 5 条评论

利用SAS系统数据视图进行批量操作

一些实际问题中,我们需要对某些数据集、某些变量等进行批量的操作和处理。对其中的某些问题,利用逻辑库sashelp下的一些系统数据视图(sashelp.vcolumn、sashelp.vmember、sashelp.vindex、sashelp.vtable等)可以较为方便的处理。

本文利用SAS系统数据视图进行批量操作进行简单的说明。

1.利用sashelp.vcolumn数据视图

ashelp.vcolumn中包含了所有的逻辑库名、数据集名、变量名等等,如下图:

这里,网友问,对某些数据集data1…datan进行set连接,需要处理不同数据集中相同变量的字符长度不同的问题。

继续阅读
2月 20, 2011

Posted in 数据处理 | 8 条评论

SAS中保存统计分析步的结果至数据集中

在我们做完统计分析步(如proc reg等)后,有时想要将某些结果数据保存在数据集中,较为简单的常用方法有下面三种:使用proc步结果输出选项,使用output语句,使用ods output的方法。

下面以较为常用的proc reg步进行举例说明:

1.使用proc reg步结果输出选项

在proc reg ; 的options中可以选择outest= 选项来产生一个数据集,用于存储参数估计值、模型拟合的相关统计值等;同时还有edf、outseb、tableout、sse等选项(其他更多选项参见SAS help文档),可以将你想要的统计分析结果存储于outest= 生产的数据集中。

  • OUTEST= outputs a data set that contains parameter estimates and other model fit summary statistics
  • EDF outputs the number of regressors, the error degrees of freedom, and the model R2 to the OUTEST= data set
  • OUTSEB outputs standard errors of the parameter estimates to the OUTEST= data set
  • TABLEOUT outputs standard errors, confidence limits, and associated test statistics of the parameter estimates to the OUTEST= data set

例:

proc reg data=sashelp.class outest=result1 edf sse;
	model weight=height;
quit;

数据集work.result1如下:

继续阅读
2月 14, 2011

Posted in | 1 条评论

SAS macro symbol table(2):特殊规则

上篇对macro symbol table的常规应用进行了简单的梳理,本篇对如call symput的非宏语言在建立宏变量时symbol table的特殊规则进行梳理。

1.the into : operator in PROC SQL

“into :”算符并不不属于宏语言,但是其定义宏变量的过程基本与使用%let相同:先由当前local,再向上级直到global中搜寻所定义的宏变量是否存在,再进行相应的处里。参见SAS macro symbol table(1)

style=”text-align: center;”>需要了解的是,在proc sql执行过程中,会自动产生三个包含该proc sql过程信息的宏变量:sqlobs、sqlrc和sqloops,如下:

  • SQLOBS: set to the number of rows produced with a SELECT statement.
  • SQLRC: set to the return code from an SQL statement.
  • SQLOOPS: set to the number of iterations of the inner loop of PROC SQL.

合理的使用以上三个宏变量,对程序的编写可以起到很好的作用。

继续阅读
2月 9, 2011

Posted in | 3 条评论

SAS macro symbol table(1):常规应用

SAS macro语言中,理解宏变量(macro variables)的作用域(the scope)是十分重要的,宏变量的作用域决定着该变量的赋值(assign)及宏处理器(macro processor)对该变量的解析(resolve)。所有的宏变量均存储于符号表(symbol table)中,其分为全局(global)和局部(local)两种。
本文将对SAS macro语言中symbol table的概念及常规应用,结合SAS ADV认证中的一些习题做一些简单的梳理。

1.基本概念

Global symbol table

  • global symbol table在SAS启动(SAS section)的开始就被创建,其默认存储着所有的自动宏变量(automatic macro variables)如sasdate9,sasday等(除了saspbuff之外)。其也可以存储用户自己定义的宏变量。
  • 默认情况下,存储于global symbol table中的宏变量——global macro variables,存在于整个SAS section中,并可以在SAS程序中的任何地方(除了datalines/cards中)被引用(resolved)。

Local symbol table

  • local symbol table在一个包含着宏变量的宏程序执行开始时,才被创建,该宏程序执行结束后,相应的local symbol table自动被清除。
  • 默认情况下,存储于local symbol table中宏变量——local macro variables,仅可以在与该local symbol table对应的宏程序中被引用。

继续阅读
第 3 页,共 4 页1234
返回顶部