立即注册 登录
公卫人 返回首页

asteriod的个人空间 https://www.epiman.cn/?12177 [收藏] [复制] [RSS]

日志

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

热度 1005已有 939 次阅读2010-9-3 09:45 |个人分类:access数据库开发与应用|

   最近,刚完成一个基于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了。
  


路过

鸡蛋

鲜花
5

握手

雷人

刚表态过的朋友 (5 人)

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 立即注册

手机版|会员|至尊|接种|公卫人 ( 沪ICP备06060850号-3 )

GMT+8, 2024-4-30 06:22 , Processed in 0.053850 second(s), 6 queries , Gzip On, MemCached On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

返回顶部