如果出现错误,SAS 会发送电子邮件

2024-05-31

是否有任何代码/宏可以合并到我的 SAS 程序中,一旦我的 SAS 代码在运行时发生错误,它就会向我发送电子邮件?

另外,这封电子邮件是否可能包含所发生的错误?


是的……又不是……

这是可能的——但没有好的方法来做到这一点。您必须在每个过程之后检查是否发生错误。基本上,您将插入一行代码来在整个代码中执行数十(或数百)次测试。

我经常发现在整个程序运行之后执行测试就足够了。如果中途发生错误,那么 SAS 通常会进入语法检查模式,因此在错误发生后不会执行任何代码。

这种方法也有其自身的一系列问题。首先,包含错误信息的 SYS 宏变量仅存储最近错误的信息。我们可以检查日志,但这样做的问题是日志仍在被我们当前运行的程序使用,并且要检查这会阻止我们使用 SAS 打开它进行读取。

我解决这个问题的方法是给 SAS 打电话两次。第一次运行程序并将日志保存到指定文件中。第二次运行程序,该程序将检查刚刚创建的日志文件,并在满足特定条件时发送电子邮件(例如以以下内容开头的行)ERROR:.

一些细节...当您第二次启动 sas 时,您可以使用SYSPARM参数传入要检查的日志文件的名称。您可以使用类似以下的代码解析日志文件(我建议您根据自己的情况自定义条件):

**
** READ IN LOGFILE. CHECK FOR PROBLEMS
*;

data problems log;
  length line $1000;

  infile "&logfile";
  input;

  logfile = "&logfile";
  line_no = _n_;
  line    = _infile_;
  problem = 0;

  if 
  (
     line =: "ERROR:"
  or line =: "WARNING:"
  or line =: "NOTE: Numeric values have been converted to character values"
  or line =: "NOTE: Character values have been converted to numeric values"
  or line =: "NOTE: Missing values were generated as a result of performing an operation on missing values"
  or line =: "NOTE: MERGE statement has more than one data set with repeats of BY values"
  or line =: "NOTE: Invalid (or missing) arguments to the INTNX function have caused the function to return"
  or line =: "INFO: Character variables have defaulted to a length of 200"
  or line =: "NOTE: Invalid"
  )
  and not
  (
      line =: "WARNING: Your system is scheduled to expire"
  or  line =: "WARNING: The Base Product product with which Session Manager is associated"
  or  line =: "WARNING: will be expiring soon, and is currently in warning mode to indicate"
  or  line =: "WARNING: this upcoming expiration. Please run PROC SETINIT to obtain more"
  or  line =: "WARNING: information on your warning period."
  or  line =: "WARNING: This CREATE TABLE statement recursively references the target table. A consequence"
  or  line =: "WARNING: Unable to copy SASUSER registry to WORK registry. Because of this, you will not see registry customizations during this"
  or  line =: "WARNING: Estimates did not improve after a ridge was encountered in the objective function."
  or  line =: "WARNING: Estimates may not have converged."
  or  line =: "ERROR: A lock is not available for"
  or  line =: "ERROR: Errors printed on page"
  or (line =: "WARNING: Apparent symbolic reference TODT not resolved." and "%upcase(&jobname)" eq "DIAL800.REPORTING_API")
  )
  then do;
    problem = 1;
    output problems;
  end;
  output log;
run;

filename mymail email content_type="text/html"
                      to=( [email protected] /cdn-cgi/l/email-protection )
                      from=("[email protected] /cdn-cgi/l/email-protection")
                      subject="mysubject"
                      attach="&logfile";

data _null_;
  length divider $200;

  file mymail;

  set problems end=eof;

  divider = repeat('=',80);

  if _n_ eq 1 then do;
    put '<font style="font-family:courier new;font-size:9pt"><br>';
    put divider "<br>";
    put "SUMMARY OF PROBLEMS: &logfile <br>";
    put divider "<br><br>";
  end;

  put line_no 5. ": " line "<br>";

  if eof then do;
    put divider "<br>";
    put "END OF SUMMARY     <br>";
    put divider "<br><br>";
  end;

run;

从您的问题中尚不清楚您是否知道如何在 SAS 中发送电子邮件,但如果不知道,我建议先用谷歌搜索它,如果您仍然无法使其正常工作,请回来并发布一个单独的问题。

编辑:您可以使用以下命令指定 SAS 应将日志文件保存到的位置-LOG "myfile.log"调用 SAS 时的参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果出现错误,SAS 会发送电子邮件 的相关文章

  • VBA - 打开Excel,查找和替换,删除行,另存为csv

    我正在尝试用VBA编写一个程序 以便我可以从SAS 一种统计编程软件 远程操作excel文件 我希望该程序能够完成以下任务 打开指定的excel文件 查找标题行中的所有空白并将其替换为空 例如 测试名称 变为 测试名称 如果行中的第一个单元
  • 将回归结果输出到 R 中的数据帧中

    我想知道是否有任何命令可以将 lm 模型的结果输出到 R 中的数据帧中 就像 SAS 中的 outest 一样 有任何想法吗 我正在运行多个模型 我希望结果如下所示 Model alpha Beta Rsquared F df model0
  • SAS 我可以逆向进行 sas 过程观察吗

    我知道Sas在处理时从数据集顶部的观察开始 然后继续进行下一个直到到达底部观察 但是有没有一种简单的方法可以让sas首先处理底部观察 然后再处理到顶部 您可以使用nobs and point向后处理它 而无需执行任何中间步骤 这是一个例子
  • 将 CSV 中的所有列导入为字符?

    简单的问题 PROC IMPORT OUT braw address DATAFILE path address data csv DBMS csv REPLACE GETNAMES YES RUN 该语句将创建数据集列作为字符or数字取决
  • 使用 R 的过程 GLM (SAS)

    我需要测试应该在奶牛遗传评估模型中包含哪些效应 在 SAS 中我会使用 proc GLM SAS 代码为 data paula1 set paula0 proc glm class year herd season model milk y
  • 以批处理模式运行时提示输入 SAS ODBC 连接密码

    由于各种原因 我更喜欢尽可能以批处理模式运行 SAS 程序 出于安全原因 我希望每当与 Teredata 仓库建立 ODBC 连接时 SAS 都会提示我输入密码 我可以同时拥有这两个东西吗 以下代码在从 SAS 交互运行时工作正常 但在批量
  • 解析宏变量名称中包含 %eval 的宏,SAS

    这是一个玩具示例 旨在帮助解决我遇到的更大问题 它本质上涉及在引用更大的宏变量名称时使用 eval 宏 我创建了一个宏变量 x 2 它使用循环 it 的值 从最终输出可以看出该变量已成功创建 但是我只能将其放入日志而不评估 it 1 这当使
  • XPT 到 CSV 的转换? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 也许这是错误的地方 但我不太确定该把它放在哪里 我有一个非常大的 XPT 格式的压缩 SAS 文件 我
  • 增加 sas 内存/memsize

    您好 有一个包含大约 6000 个观测值和 250 个变量的数据集 我正在尝试使用 proc mix 在 sas 中运行混合模型 但我不断收到 错误 由于内存不足 sas 系统停止处理此步骤 我尝试了康奈尔大学的方法 http www ci
  • SAS 和 Excel 中百分位数的不同结果

    我正在尝试获取 SAS 中的百分位数 我在 Excel 中得到了百分位数 我期望在 SAS 中也得到相同的结果 但是当我在 SAS 中得到百分位数时 它与 excel 中的不同 我正在使用下面的示例数据 1 2 3 4 5 6 7 8 9
  • Proc sql:基于回顾期的新客户和继续客户

    我有以下数据 wei 01feb2018 car wei 02feb2018 car wei 02mar2019 bike carlin 01feb2018 car carlin 05feb2018 bike carlin 07mar201
  • 宏中的 SAS 宏

    我有一个关于 macro 的问题 我可以在另一个 宏中设置 宏吗 简短的例子 情况的 图片 macro Tier 1 do Iter 1 to i macro Tier 2 proc sql noprint select 1 Iter in
  • 如何在SAS中删除重复的记录\观察而不进行排序?

    我想知道是否有办法取消重复记录WITHOUT排序 有时候 我想保留原来的顺序 只想删除重复的记录 是否可以 顺便说一句 以下是我对不重复记录的了解 它最终会进行排序 1 proc sql create table yourdata nodu
  • 删除 SAS 中的表

    什么是最高效的SAS中删除表的方法 我有一个循环并删除大量表的程序 想知道 PROC SQL 之间是否存在性能差异 和过程数据集 一次删除一张桌子 或者如果还有其他方法吗 如果外包给操作系统是合理的 那可能是最快的 否则 我的不科学观察似乎
  • SQL - 每个级别都有记录的递归树层次结构

    尝试使用 SAS 据我所知 不支持WITH RECURSIVE 在 SQL 中创建经典的层次结构树 这是现有表中的简化数据结构 USER ID SUPERVISOR ID 因此 要构建层次结构 您只需递归连接 x 次即可获取您要查找的数据
  • 重新排列 sas 数据集中的变量 - 按字母顺序排列

    我有大约 500 列的数据集 我想按字母顺序重新排列所有变量 除了在 set 语句之前使用保留语句之外 我还能以其他方式做到这一点吗 您可以动态生成变量名称列表 并使用以下命令创建新数据集PROC SQL proc sql select n
  • SAS Proc SQL 中的列表聚合和组串联

    我有一个数据集 必须根据粒度 FIELD1 和 FIELD2 进行汇总 必须对两个指标字段 METRIC1 和 METRIC2 求和 到目前为止 这似乎是一个简单的 GROUP BY 任务 但我有一个字符串字段 FLAG 也必须通过连接不同
  • 从数据变量生成宏变量的宏函数

    data sample input x datalines one two three macro variable to macvar variable dataset proc sql noprint select variable i
  • SAS 显示管理器命令

    SAS 显示管理器是 SAS 系统的命令行界面 它作为遗留设施保留在 Base SAS 中 然而 关于如何使用此功能的在线文档充其量也很少 而且谷歌搜索也没有什么成果 常见的 DM 命令是 CLEAR LOG 清晰的输出 WPGM 我的问题
  • 如何使字符变量等于任意 SAS 格式的数值变量的格式化值?

    如果我有一个具有格式的数字变量 有没有办法将格式化值作为字符变量获取 例如我想写类似下面的内容来打印10 06 2009到屏幕上 但没有putformatted 功能 data test format i ddmmyy10 i 10JUN2

随机推荐

  • 选择MySql表数据放入数组中

    我尝试从 mysql 捕获数据并将它们全部放入数组中 认为 users table id name code 1 gorge 2132 2 flix ksd02 3 jasmen skaod2 sql mysql query select
  • 如何在 jQuery 中检查复选框是否被选中?

    我需要检查checked复选框的属性 并使用 jQuery 根据选中的属性执行操作 例如 如果age复选框被选中 然后我需要显示一个文本框来输入age 否则隐藏文本框 但下面的代码返回false默认情况下 if isAgeSelected
  • 找不到图标路径的 Cordova Android 版本

    打字时cordova build android在 DOS 框中 没有构建任何内容 但我看到一条错误消息 错误 源路径不存在 resources android icon drawable hdpi icon png 我已经更新了 Cord
  • 跨类别和列自动化卡方

    我有一个调查数据框 其中包含几个问题 列 编码为 1 同意 0 不同意 受访者 行 根据 年龄 年轻 中年 老年 地区 东 中 西 等指标进行分类 大约有30个类别总共 3个年龄 3个地区 2个性别 11个职业等 在每个指标中 类别不重叠且
  • 对远程 WebDriver 服务器的 URL 的 HTTP 请求...在 60 秒后超时

    我将 Selenium 与 Internet Explorer Web 驱动程序 IEDriverServer 一起使用 由于某种原因 我找不到它的代码库来打开这个错误 因此 如果有人也能指出我的方向 我将不胜感激 这个问题似乎广泛存在于所
  • 设置字符串中单词或字符数的限制

    假设我有一个字符串元素列表 wordlist hi what s up home diddle mc doo Oh wise master kakarot hello have a da 我希望列表中的每个元素最多包含 3 个单词或 20
  • PHP邮件功能有时可以工作

    我正在编写一个脚本 需要通过PHP邮件功能发送电子邮件 如下所示 它在向 gmail 帐户发送电子邮件时有效 但在我的域中的帐户却无效 我们正在运行 Exchange 服务器 截至目前 电子邮件是从 www server 发送的 有谁知道
  • 当应用程序打开时,应用程序未显示接收 FCM 的通知

    当我从 Firebase 发送推送时 如果应用程序在后台或已关闭 我会收到通知 但当应用程序打开时不会 调试我发现它在 MyMessagingService 中特别是在 onMessageReceived 处停止 所以我猜我的问题在于生成通
  • 如何仅在第一次访问时弹出模态窗口

    我有一个模式窗口 当您访问某个页面时会弹出 访客必须选择我同意或我不同意 我需要一个漂亮的小 jquery 脚本 它会记住谁之前访问过该页面并同意 这样他们每次访问该页面时就不会弹出模式 有人可以推荐一个好的脚本来使用吗 这是代码 div
  • C中使用JNI从对象获取对象

    public class Student private People people private Result result private int amount 这是 Java 中类的示例 在C中 我试图获取 学生 中的 人 但失败了
  • 如何在realm-dotnet中存储System.Collections.Generic.Dictionary

    我正在尝试将 Realm NET 集成到我的 uwp 项目中 我想知道是否有任何方法可以在 Realm dotnet 库中存储 System Collections Generic Dictionary 我试过这个 public class
  • PyMC3 和 Theano - 导入 pymc3 后,有效的 Theano 代码停止工作

    一些简单的 theano 代码可以完美运行 当我导入 pymc3 时停止工作 这里有一些片段可以重现错误 Initial Theano Code this works import theano tensor as tsr x tsr ds
  • 引用与指针的执行速度

    我最近阅读了一篇关于托管语言是否比本机语言 特别是 C 与 C 慢 或快 的讨论 一位参与讨论的人士表示 托管语言的 JIT 编译器将能够对引用进行优化 而这在使用指针的语言中是不可能实现的 我想知道的是 对于引用而不是指针可以进行 什么样
  • 在 MySQL 中分割逗号分隔值

    我正在尝试将字符串中以逗号分隔的 值拆分为多列 样本数据 COL1 COL2 COL3 000002 000003 000042 09 31 51 007 004 007 预期输出 Pno Cno Sno 000002 09 007 000
  • 我可以在 NS_SWIFT_NAME 中使用保留关键字吗?

    我正在尝试使 Objective C 委托协议更漂亮以便在 Swift 中使用 但我在弄清楚如何使用时遇到了一些麻烦NS SWIFT NAME 是否可以使用NS SWIFT NAME指定 Swift 名称中与 Objective C 关键字
  • CompletableFuture 的多个 thenAccept 块的执行顺序是什么

    所以我有一个返回a的方法CompletableFuture 在返回之前 此方法添加一个块thenAccept这是在之后执行的CompletableFuture完成 此方法的调用者还添加了另一个块thenAccept 显然 这可以通过多个链式
  • 如何在Keycloak中注册自定义ProtocolMapper?

    我正在努力在 Keycloak 中注册自定义 ProtocolMapper 我想根据令牌请求从我的数据库添加一些数据 所以我遵循了给出的想法Keycloak 添加来自数据库 外部源的额外声明 https stackoverflow com
  • jQuery fadeOut 一个 div,fadeIn 另一个 div 在其位置

    我正在尝试一个简单的 jQuery 脚本来淡出一个 div 并淡入另一个 div 但由于某种原因 第一个 div 永远不会淡出 这可能是代码的一个明显问题 但我似乎无法弄清楚 div div div div
  • 来自 Janino 和 Commons-Compiler 的 Spark java.lang.NoSuchMethodError

    我正在构建一个使用 Spark 进行基于随机森林分类的 应用程序 当尝试运行该程序时 我从该行收到异常 StringIndexerModel labelIndexer new StringIndexer setInputCol label
  • 如果出现错误,SAS 会发送电子邮件

    是否有任何代码 宏可以合并到我的 SAS 程序中 一旦我的 SAS 代码在运行时发生错误 它就会向我发送电子邮件 另外 这封电子邮件是否可能包含所发生的错误 是的 又不是 这是可能的 但没有好的方法来做到这一点 您必须在每个过程之后检查是否