gpt4 book ai didi

sas - 将 SAS 代码转换为另一种语言,变成独立的可分发 exe

转载 作者:行者123 更新时间:2023-12-05 00:31:12 26 4
gpt4 key购买 nike

我是一名 SAS 程序员,使用 Base/SAS 构建了一个阿片类吗啡毫克当量 (MME) 计算器。部署任何类型的 SAS 可分发软件都很困难,因为最终用户必须拥有 SAS 许可证,而这非常昂贵。我确实有 SAS/Connect 选项,这是一个客户端/服务器设置,但我希望我的最终用户将他们的数据保存在他们的系统上,而不是上传到云中的 SAS 服务器。原因是,数据隐私对于医疗 claim 非常重要。所以。代码不是特别复杂,但我不知道从哪里开始将它转换成带有用户界面的独立可执行文件,以便最终用户可以浏览他们系统上的文件,然后运行程序来计算每个病人的 MME。返回给最终用户的可交付成果将是患者每日阿片类药物 MME 剂量的摘要文件,以及最终用户可能需要的其他报告。我可以在 SAS 中完成所有这些,但 SAS 并没有让它成为分发代码。也许如果我分享代码并解释它的作用,有人可以帮助我吗?这将是一份有偿工作 $$。

这是使用哈希表的 SAS 代码。

第二种计算患者每日阿片类药物 MME 剂量的方法涉及 SAS 哈希表。我依赖于描述如何使用哈希表的几篇 SAS 论文,请参阅本文末尾的引用部分。假设数据集 CLAIMS 具有以下列:PATIENT_ID、RX_FILL_DATE、NDC_CODE、DAYS_SUPPLY、QTY_DISPENSED、DAILY_MME_DOSE、STRENGTH_PER_UNIT、MME_CF(MME 转换因子),并且 DAILY_MME_DOSE 列已使用以下公式计算:DAILY_MME_DOSE = STRENGTH_PER_UNIT*(QTY_DISPENSED/DAYS_SUPPLY)*MME_CF

创建一个 DATA _NULL_ 步骤,它将循环遍历数据集 CLAIMS,并在多个阿片类药物处方和多个处方者(如果有)中添加患者的每日 MME 剂量。

DATA _NULL_;
FORMAT DATE DATE9.;
/* define the hash table PATIENT_MMES, it starts out empty */
DECLARE HASH PATIENT_MMES();
/* define the two-part key for the hash table: PATIENT_ID and DATE */
RC=PATIENT_MMES.DEFINEKEY('PATIENT_ID','DATE');
/* define the data to be included in the PATIENT_MMES hash table, adding the TOTAL_MMES column, which we will be adding to as we iterate through the dataset CLAIMS */
RC=PATIENT_MMES.DEFINEDATA('PATIENT_ID','DATE','TOTAL_MMES');
RC=PATIENT_MMES.DEFINEDONE();

/* iterate through the CLAIMS dataset until the end-of-file (EOF) is reached */
DO UNTIL (EOF);
SET CLAIMS END=EOF;
/* initialize TOTAL_MMES to missing */
TOTAL_MMES = .;

/* iterate through the entire days supply of each opioid script: */
DO I = 0 TO (DAYS_SUPPLY-1);

/* define DATE as a dynamic date counter, it will loop through every day in the drug’s days supply */
DATE = RX_FILL_DATE + I;

/* define DAY as the day number of the DAYS_SUPPLY */
DAY = I+1;

/* initialize TOTAL_MMES to the first DAILY_MME_DOSE */
TOTAL_MMES = DAILY_MME_DOSE;

/* use the Find function to look up the patient_id and the date. If the combination is not found, then add the patient_id, date, and TOTAL_MMES to the hash table PATIENT_MMES */

RC=PATIENT_MMES.FIND();
/* RC is 0 if the patient_id, date combination was found
RC is not 0 if the patient_id, date combination was not found
If not found, then add to the hash table */

IF RC NE 0 THEN PATIENT_MMES.ADD();
/* If the patient-date combination is found, because we already
added it, then increment the TOTAL_MMES by the DAILY_MME_DOSE */

IF RC=0 THEN
DO;
TOTAL_MMES = TOTAL_MMES + DAILY_MME_DOSE;
/* if the combination was found, then replace the
TOTAL_MMES with its new, incremented value */
RC=PATIENT_MMES.REPLACE();
END;

END;
/* when the end-of-file is reached, output to the dataset
PATIENT_DATE_SUMMARY */
IF EOF THEN PATIENT_MMES.OUTPUT(dataset: 'PATIENT_DATE_SUMMARY’);
STOP;
RUN;

最佳答案

没有工具可以将 SAS 程序或步骤编译成单独的 .exe 或 .dll。

如果您在一家安装了 SAS 服务器的公司工作,您可以将您的代码发布为存储过程,其他用户可以在登录到 SAS 服务器时通过浏览器运行该存储过程。

您可以创建一个 .dll 或 (.exe) 来保护计算方法并使其可用于非 SAS 环境。 .dll 需要将所有用于计算的数据传递给它,或者如果 .dll 应该自己检索数据则需要一些数据检索参数(2 个示例:(1) 数据文件名,或 (2) odbc 连接字符串和查询)。

SAS 有几个接口(interface)方法和调用例程,允许 SAS session 执行动态加载库 (.dll) 中的方法或运行外部程序。

动态链接库:

  • 模块调用例程
  • modulen 函数
  • modulec 函数

执行文件:

  • X 语句
  • %SYSEXEC 声明

如果您希望为广大非 SAS 用户提供大量数据报告功能,则必须在可广泛免费分发的非 SAS 系统中实现该功能,例如:

  • 您编译和分发用户可以运行的单独的 exe
    • 可能需要其他(非 SAS)第 3 方库许可才能获得您想要的输出图表
  • 网络服务器端点
    • 输出由 R、PHP、Perl、ASP 等技术生成...
  • 不同系统的程序源代码(例如 R)
    • 用户自己安装 R 并运行源代码

保护健康数据的要求意味着最可能的情况是您的 MME 计算是通过某种网络服务器执行和交付的。这也使您能够最大程度地控制用户将使用的计算“版本”。

关于sas - 将 SAS 代码转换为另一种语言,变成独立的可分发 exe,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59053181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com