Feeds
RSS
Atom
在编写宏程序的时候遇到一个问题,即一个宏变量与其它字母、数字按一定的规则组合成为另一个宏变量,比如
%let mvar = group;
%let &mvar.1 = A;

即上面这条语句定义了一个新的宏变量:group1,值是A,那么这个宏变量如何在程序中调用呢?

[阅读全文]

用GOOGLE检索医用SAS统计分析的时候,偶然发现的一堆SAS方面的资料,可能对有些朋友有用吧,下面是这些资料的链接。

[阅读全文]

tags:
/*
SAS宏程序名称:helloWord
主要功能:启动windows系统中的winword程序,打开一个已经存在的word文件或创建新文件
主要参数:dir:给定的目录;docName:word文件名
使用方法:%helloWord(d:\test\a,hello);   **目录可任意给定,不用加引号;文件名可以不加.doc的后缀,当然加了也no problem;
说明:这个宏在XP/SAS9.13/Office2007下运行正常,在类似的环境下估计也无问题(比如XP/SAS8/Office2003),热心的朋友请帮忙测试,有问题的话希望能反馈给我;
          另外还有一点,这个宏中引用了另一宏(mkdir,功能是建立文件夹),在helloWord运行过程中,如果给出的目录不存在就用mkdir创建这个目录。
联系我:medleaf@gmail.com
我的主页:http://www.eyaoo.net/weblog/
*********************************************************/

[阅读全文]

前几年利用SAS的DDE技术编写了几个用于统计报告报表的宏程序,将统计表直接写到WORD中,对于工作效率而言,确实提高了不少,不过这些宏程序编写 的很乱,也不够完善,写统计报告的时候,还需要做些Ctrl+C后Ctrl+V的工作,所以决定重新编写这些宏程序,主要是精炼程序代码,增加功能,目标 只有一个,即一键生成 Report(理想化,别当真,呵呵)。

[阅读全文]

vista系统给我的第一印象是华丽、庞大但不实用,对很多程序的支持不好,所以最初本本上的Vista,虽然是正版,只用了一天就改了XP,因为怕sas V8装不上。

不过现在我改变了对Vista的看法:SAS V8装在Vista系统下运行正常!前几天把系统又恢复成Vista的,想体验下,因为同事用的还不少,有了问题问我这个“电脑高手”时我总是要费上半天 的劲,有时还搞不定。所以决定恢复Vista系统,好好体验下。结果发现,Vista系统还不错,除了比较吃内存以外,呵呵。SAS V8也成功安装并正常运行。就是我常用的陈桥五笔,总是有问题,最后安装了极点五笔,这个五笔对Vista支持很好,建议用五笔的朋友不妨一试。

现在对Vista算是刚刚上手,还有许多没有接触的东西,不过总体看来,尤其是安全性方面,Vista较XP有很大的进步。

tags: , ,

因为总是出现因拼写错误过多导致WORD崩溃的问题,一生气把用了多年的OFFICE XP换成了office 2007。

后来还担心sas与WORD 2007之间能否正常通讯,结果让人欣慰。WORD 2007可以在兼容模式下接收并正确执行来自SAS的WordBasic命令。所以在OFFICE 2007下,应用dde技术输出SAS报表到WORD文档中仍然可行。

使用sas的dde将文本写入Word文档,最常用的就两个WordBasic命令:Insert和InsertPara
看下面的这个例子:

%helloword(c:\,example); /*注:1*/
data _null_;
file cmds;
put '[Insert "我的第一个例子"]‘; /*注:2*/
put ‘[InsertPara]‘; /*注:3*/
run;

1:调用宏程序helloword,在C盘上建立一个名为example的Word文档
2:将“我的第一个例子”这几个字插入到上述文档当前光标的位置,也就是文档的第一行
3:插入一个段落标记,此时Word中的光标已经下移到第2行

怎么样,用DDE将文本写入Word文档比较简单吧,用英文的双引号将文本引起来,利用Insert命令就直接将这些引用的文本插入到文档中了。如 果此处的文本是一个宏变量,或者是一个宏程序中的参数,引用的格式稍有不同,实际上在宏程序helloword中就有这种情况:
put '[ChDefaultDir "'"&filepath"'",0]‘;
put ‘[FileSaveAs.Name="'"&docname"'",.Format=0]‘;
我们可以看到,对宏变量及参数的引用,使用的是英文的双引号单引号双引号“‘”将宏变量或参数引起来,在执行的时候宏变量或参数先被赋值然后执行,此时的宏变量或参数无需加双引号。如果定义宏变量或给参数赋值时加双引号,则使用双引号单引号“‘。
接下来(把下面这几句插入到上面程序中Run;的前面):

put '[Insert "表格1"]‘;
put ‘[InsertPara]‘;
put ‘[Insert "单元格1"+chr$(9)+"单元格2"+chr$(9)+"单元格3"]+[InsertPara]‘; /*注:4*/
put ‘[Insert "单元格2-1"+chr$(9)+"单元格2-2"+chr$(9)+"单元格2-3"]+[InsertPara]‘;
put ‘[EndOfDocument]‘; /*注:5*/
put ‘[ParaUp 2,1]‘; /*注:6*/
put ‘[TextToTable.ConvertFrom="1",.NumColumns=3,.NumRows=2,.InitialColWidth="Auto",.Format="4",.Apply="63"]‘; /*注:7*/
put ‘[FileSave]‘;/*注:8*/

我们来看看这几个语句的意义:
4:这个语句中出现了chr$(9),其实这个就是制表符,为将来表格的形成做准备;另外,这个语句还有一个不同之处,就是在单引号中有两对方括号,即在一个put语句中可以写多条WordBasic命令,每个命令用一对方括号括起来。
5:看这个命令的英文,我们就大概能猜出来,将光标放到文档的最末尾。当然,这个语句在这里其实没有用,因为光标已经在文档的末尾,我们只是为了举例。
6:这个语句也很好记,向上移动光标,移动的最小单位是1行。它有两个参数,第一个参数是向上移动的行数,第二个参数表示是否选取,1表示选取当前光标至 光标移动后所在位置的所有文本及控制符,0表示不选取,仅移动光标。[ParaUp 2,1]即表示选取当前光标上面的2行。
7:在6中我们已经选择了2行文本及其间的制表符,这一句就是把已经选取的部分,转成表格,这个命令和WORD表格工具中的选择->文本转换成表格 其实是一样的。TextToTable后面的几个参数是转换过程的具体控制,基本上从字面的意思就可以理解出来,以后如果有时间会详细介绍这些参数的使 用。
8:文件保存。

将sas的统计分析结果输出到Word文档中,实现起来并不复杂,利用SAS提供的ods(Output Delivery System,输出传递系统),可以很方便的将结果输出到.rtf(也就是Word格式文档)、.html(网页)以及PDF文档中。
最简单的实现:
ods rtf file="filepath:docname.rtf";
proc step
...
ods rtf close;

[阅读全文]

在临床试验中,使用sas计算受试者的年龄,大体上有两种三种思路:

一种是计算当前日期(应该是受试者签署知情同意书的那一天)与受试者生日相差有多少天,然后除以365.25即为年龄值(我把它叫做计算法),另一 种思路是,根据当前的月、日进行判断,当前月份比出生月份大的,或月份相同但当前日等于或大于出生日的情况,年龄即为当前年份与出生年份之差,否则,年龄 是上述差-1,这种方法计算的是整数周岁(我称之为判断法,呵呵),而第一种方法如果不对结果取整的话,年龄是带有小数位的。

第三种方法也是计算周岁,实现方法更为简单,结果与第二种方法是一致的。具体的代码见文后的补充。

[阅读全文]