如何利用ACCESS开发医学数据分析系统(实例分析)

来源:互联网 时间:2016-01-03

最近,刚完成一个基于ACCESS的数据分析系统的开发,现把一些重要的细节做一记录。

一、用户需求分析是整个工作的核心和关键。做好任何事情,计划都是关键,好的需求分析可以节省很多时间。我的经验是,系统不复杂的话,可以直接画用户界面的草图。把每个窗体上的表单和按钮都想清楚了,另外窗体间的链接,每个按钮实现那些功能,那些窗体进行组合等等都想清楚。这个方法可能对于复杂的系统不太够用,但对我们这种相对简单的系统绝对够用了。另外,这种方法可以方便向用户展示,看是否满足了用户的业务需求。

二、下面记录几个技术细节:

(一)数据的导入:用户的数据是CSV格式,要进行分析必须通过窗体把数据导入进来,可以使用下面的sql语句:strSqlAdd = "INSERT INTO DEATHCASE SELECT * FROM [Text;FMT=Delimited;HDR=Yes;DATABASE=" & ff1 & ";].[" & replace(ff2,".csv","") & "#csv];" 两个变量(路径和数据名)可以通过窗体进行设定。

(二)一个复杂sql条件的写法:

库中的基本结构如下表

地区编码(Rid) 姓名(name 性别(sex) 年龄(age) 登记日期(date) 登记编码

11010206 张三 男 12 2009-11-2 R10

11010206 李四 男 15 2009-10-2 R11

11010206 王五 女 19 2007-08-07 A98

11010206 赵六 女 78 1999-1-3 C11

11010207 刘八 男 22 1970-1-4 S11

11010207 赵四 女 45 1970-5-5 S12

要进行数据库的查重操作,要把重复记录用一个sql筛选出来,重复记录的定义为:

地区编码相同 并且 姓名相同(姓名相同定义为姓名完全一样或相差一个字)并且 性别、登记编码、年龄、登记时间这些变量中任2个相同(年龄相差10岁、登记时间相差6个月就认为相同);

举个例子:

下面这两条记录,乡镇编码相同 且 姓名相同(差一个字认为相同) 且 性别和年龄相同 (年龄差三岁)

地区编码(Rid) 姓名(name) 性别(sex) 年龄(age) 登记日期(date) 登记编码

11010206 张三 男 12 2009-11-2 R10

11010206 张三丰 男 15 2002-10-2 R11

很明显,这个条件有点复杂,刚开始写的sql语句:

SELECT *

FROM TEMP1 AS T

WHERE (((Exists (select 1 from

TEMP1 where ((abs(age-t.age)<10)+(abs(age-

t.age)<10)+(abs(DateDiff("m",date,t.date))<6)<=-2 ) AND

id<>t.ID AND sex=t.sex AND rid=t.rid AND (N1&N2=t.n1&t.n2 OR N1&N3=t.n1&t.n3

)))<>False));

上面把姓名拆分成了n1 n2 n3 三个变量,分别对应姓名的第一、二、三个字。

这个sql运行后,速度有点慢(可能运算量有点大),后来就在VBA里对数据进行了分层操作,具体代码就不贴了。

(四)寿命表的实现:

寿命表用excel做非常方便,用程序来做就比较麻烦了。文献报道,寿命表也可以用sas编程实现,有点简单问题复杂化。用户的目标是在窗体里自动通过原始数据(个案数据)实现寿命表,用access的查询来做?比较麻烦,因为对于每一行,各个变量的运算规则不同。需要对不同的行用不同的sql,然后再合并。最后,我还是在access里窗体里实现了excel的效果,因为使用了spreadsheet控件,这个控件在office 2003里是默认安装的,使用方法也非常简单,可以直接插入到窗体里,然后再里面设置好公式,然后使用VBA给需要赋值的单元格提供数据就OK了。

相关阅读:
Top