我是一名SAS程序员,使用Base/SAS构建了一个阿片类吗啡毫克当量(MME)计算器。部署任何类型的SAS可分发文件都很困难,因为最终用户必须拥有SAS许可证,这非常昂贵。我确实可以选择SAS/Connect,这是一种客户端/服务器设置,但我希望我的最终用户将他们的数据保留在他们的系统上,而不是上传到云中的SAS服务器。原因是,数据隐私在医疗索赔中非常重要。所以。代码并不是非常复杂,但我不知道从哪里开始将其转换为具有用户界面的独立可执行文件,以便最终用户可以浏览其系统上的文件,然后运行程序来计算每个患者的MME。返回给最终用户的可交付文件将是患者每日阿片类MME剂量的摘要文件,以及最终用户可能需要的其他报告。我可以在SAS中完成所有这些工作,但是SAS不会发布代码。也许如果我分享代码并解释它是做什么的,有人可以帮助我?这将是一个有报酬的工作$$。
下面是使用哈希表的SAS代码。
计算患者每日阿片类MME剂量的第二种方法涉及SAS哈希表。我参考了几篇SAS论文,描述了如何使用哈希表,请参阅本文末尾的参考资料部分。假设dataset 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 =MME
创建一个DATA _NULL_步骤,该步骤将遍历数据集声明,并添加患者跨多个阿片类药物处方和多个处方者的每日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;发布于 2019-11-26 23:07:08
没有工具可以将SAS程序或步骤编译成单独的.exe或.dll。
如果您在一家安装了SAS服务器的公司工作,则可以将代码发布为存储进程,而其他用户在登录到SAS服务器时可以通过浏览器运行存储进程。
您可以创建一个.dll或(.exe)来保护计算方法,并使其可用于非SAS环境。.dll将要求将计算所需的所有数据传递给它,或者如果.dll需要检索数据本身,则需要一些数据检索参数(2个示例:(1)数据文件名,或(2) odbc连接字符串和查询)。
SAS有几个接口方法和调用例程,允许SAS会话执行动态加载库(.dll)中的方法或运行外部程序。
DLL:
module call routinemodulen functionmodulec function可执行文件:
X statement如果您希望为大量非SAS用户提供完整的数据报告功能,则必须在可广泛且免费分发的非SAS系统中实现该功能,以下是一些示例:
您编译和分发的
输出图表
保护健康数据的要求意味着最有可能的情况是您的MME计算是通过某种web服务器执行和交付的。这也为您提供了对用户将使用的计算的“版本”的最大控制。
发布于 2019-11-26 22:38:24
您可能还想使用“一种面向统计的语言”,我想到的一种可能性是开源语言“R”。
https://en.wikipedia.org/wiki/R_(programming_language)
现在,这不是你问题的直接“答案”,但它可能是一个可行方向的指针。"R“是专门面向统计工作的,与SAS (除了DATA步骤之外,它由宏调用组成)不同,它完全是一种过程性编程语言。希望这能帮到你。
(如今的SAS和SPSS都包含"R“接口,因为它是这两个工具的强大附件,并且在某种程度上”填补了传统方法中的一个漏洞“。)
另一种经常用于统计工作的开源编程语言是Python:,它与"R“结合使用
https://en.wikipedia.org/wiki/Python_(programming_language)
它特别适合处理列表,我看到这两个产品在可能使用SAS或SPSS的项目中成功地结合使用。两者都有一个充满活力和活跃的用户社区,并且都得到了很好的支持。
发布于 2019-11-26 22:56:51
对于考虑这样做的SAS开发人员来说,他们的想法是使用面向统计的语言。这很好,但我看到的许多统计数据并不是统计上的,而更多的是一种思考流而不是特定的过程。统计得到一个多项式,然后实现。YMMV.看看上面的SAS代码,它没有使用我看到的任何stat进程。
我强烈建议不要使用R,它是一种老化的语言,Python似乎已经发挥了它的作用。
对于前任,我也会说最好不要走那条路。为什么?它们很难分发,而且可以进行反向工程。
现在,我工作的领域是建议的路径,即服务器端Blazor (也称为C#/.NET)。跨平台,安全的代码库(无IP损失),几乎与Windows应用程序一样无缝工作,但通过web分发。在幕后,你可以使用任何语言来确定公式,但通过web使用其他东西来传递它。
https://stackoverflow.com/questions/59053181
复制相似问题