SAS proc sql返回group by/order by变量的重复值

2023-12-25

我有一些相当简单的 SQL,应该为每个资产每季度提供 1 行。相反,我每组得到多行。

下面是 SQL、SAS 数据步骤和一些输出数据。重复行数(在下面的数据中为 227708)等于 Num_borrowers,即 asset1 的行数。

proc sql outobs=max;

create table table1 as
select 
    case 
        when period_dt ='01DEC2003'd then '2003Q4'
        when period_dt ='01DEC2004'd then '2004Q4'
        when period_dt ='01DEC2005'd then '2005Q4'
        when period_dt ='01DEC2006'd then '2006Q4'
        when period_dt ='01DEC2007'd then '2007Q4' 
        when period_dt ='01DEC2008'd then '2008Q4'
        when period_dt ='01DEC2009'd then '2009Q4'
        when period_dt ='01DEC2010'd then '2010Q4'
        when period_dt ='01DEC2011'd then '2011Q4'
        when period_dt ='01DEC2012'd then '2012Q4'
        when period_dt ='01DEC2013'd then '2013Q4'
        when period_dt ='01JUN2014'd then '2014Q2'   
    end as QTR,
    case 
        when MM_ASSET in ('C&I', 'Foreign', 'Leasing','Scored-WF','Scored-WB')  THEN 'C&I'
        when MM_ASSET='Construction' THEN 'Construction RE'
        when MM_ASSET='Mortgage-IP' THEN 'Income Producing RE'
        when MM_ASSET='Mortgage-OO' THEN 'Owner Occupied RE'
        when MM_ASSET='Mortgage-SF' THEN 'Mortgage-SF'
        when MM_ASSET='Unknown' THEN 'Other'
    end as asset1,
    count (period_dt) as Num_Borrowers, 
    exposure,
    co_itd,
    MM_NINEQTR_LOSS,
    MM_LIFE_LOSS
  from td_prod.OBLIGOR_COMBINED
  where period_dt in ('01DEC2003'd,'01DEC2004'd,'01DEC2005'd,'01DEC2006'd,'01DEC2007'd,'01DEC2008'd, '01DEC2009'd,'01DEC2010'd,'01DEC2011'd,'01DEC2012'd,'01DEC2013'd,'01JUN2014'd)
  and mm_asset in ('C&I','Foreign','Leasing','Construction','Mortgage-IP','Scored-WF','Scored-WB'
               'Mortgage-OO','Mortgage-SF','Unknown')
  group by 1,2
  order by 1,2;

quit;



data table2; set table1;

  Total_Exposure = exposure/1000000;
  if total_exposure = 0 then total_exposure=.;
  Total_Charge_Offs =co_itd/1000000;
  Total_9Q_Losses = MM_NINEQTR_LOSS/1000000;
  Total_Life_Losses = MM_LIFE_LOSS/1000000;
  avg_borrower_exp = total_exposure/num_borrowers;
  co_rate = total_charge_offs/total_exposure;
  life_lossR = Total_life_losses/total_exposure;
  nineQtr_lossR = total_9q_losses/total_exposure;

run;



*** sample of output data set ***;
qtr             asset1      num_borrowers
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708
2003Q4          C&I             227708

意识到我上面的评论更像是一个答案。

在 SAS SQL 中,在带有 group by 子句的查询中,该子句在 select 语句中包含无关列(即不属于 group by 且不是从聚合函数派生的列),SAS 将汇总统计信息“重新合并”回原始数据(并附有说明)。大多数 SQL 只会抛出错误。下面是一个例子:

data have;
  input gender $ age score;
  cards;
M 10 100
M 20 200
F 30 300
F 40 400
;
run;

proc sql;
  select gender, mean(age) as AvgAge, SCore
    from have
    group by gender
  ;
quit;

returns:

 gender      AvgAge     score
 F               35       300
 F               35       400
 M               15       100
 M               15       200

在您的代码中,exposure、co_itd、MM_NINEQTR_LOSS 和 MM_LIFE_LOSS 都是无关列,导致 SAS 重新合并。

每当重新合并发生时,您都会在 SAS 日志中看到以下消息:

注意:查询需要重新合并摘要 统计结果与原始数据一致 数据。

See 重新合并数据部分在有关汇总函数的 SAS 文档 http://support.sas.com/documentation/cdl/en/proc/61895/HTML/default/viewer.htm#a002473699.htm更多细节

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

SAS proc sql返回group by/order by变量的重复值 的相关文章

随机推荐

  • 让 onClick 事件每次点击时执行不同的操作?

    我的表格中有 3 列 每列顶部都有一些文本 下面有一个图像 我拥有这样的功能 当有人单击 3 列之一中的图像时 它会放大该列 并使用 onClick 事件删除其他列 但是 我希望当我第二次单击图像时 它会带回其他列 我遇到的问题是弄清楚如何
  • 一对多 SVM 中的 10 倍交叉验证(使用 LibSVM)

    我想在我的系统中进行 10 倍交叉验证一对一 支持向量机 http en wikipedia org wiki Support vector machineMATLAB 中的分类 我试图以某种方式混合这两个相关的答案 libsvm 中的多类
  • 添加行时如何为 Angular ui-grid 设置动画

    我有一个 Angular UI 网格元素 我定期在数据数组的前面添加新项目 我一次只添加一些 例如 1 到 5 个新项目 我希望 UI 网格能够为添加的新行添加动画效果 现在 行会立即添加 这使得它变得紧张 我想要将新行添加到动画中 以便
  • 如何将两个向量相乘并得到一个矩阵?

    在numpy运算中 我有两个向量 假设向量A是4X1 向量B是1X5 如果我执行AXB 它应该产生一个大小为4X5的矩阵 但我尝试了很多次 进行了多种重塑和转置 它们要么引发错误说未对齐 要么返回单个值 我应该如何得到我想要的矩阵的输出乘积
  • 如何向 CouchDB (http://.couchone.com/) 执行 Ajax 请求

    我正在尝试创建一个简单的 AJAX 通过 jQuery 请求 http 您的用户名 couchone com 几乎与我在本地主机上安装了 couchdb 一样 如果我去http yourusername couchone com 通过浏览器
  • 如何在网站中实现搜索功能? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Delaunay 对带孔的二维多边形进行三角剖分

    我想对带有孔的复杂 但不是自相交 多边形进行三角剖分 以便生成的三角形全部位于多边形内部 完全覆盖该多边形 并遵守德劳内三角形规则 显然 我可以为所有点构建 Delaunay 三角剖分 但我担心多边形的某些边不会包含在生成的三角剖分中 那么
  • 比较两个字符串中的单词

    我做了两根弦 用户可以同时填写它们 char text 200 char text2 200 我需要从两个字符串中找到相似的单词 例如 Text 我一生都在这里 Text2 他们来这里是为了赢得我们所有人 我需要编程找到类似的单词 如 这里
  • 为 imageview 添加渐变

    我想在图像底部添加渐变 像这样的东西 我尝试了类似的方法 但我只得到渐变 没有图像
  • 混淆图像

    我想分发一些图像 并且不允许其他人看到它们 除非他们正在使用我的程序 我的目的是使用 JPG 文件 其中我将更改标题 以便其他图像查看器无法再阅读它们 例如 我可以删除字节 7 10 它们是 JPG 的魔术签名 稍后 我的程序将重建标题并显
  • PanResponder 内的 ScrollView

    我正在自己实现一个选项卡导航器 并在 React Native 中滑动 它工作正常 但是当我的一个选项卡中有一个 ScrollView 时 它似乎会损坏 左右滑动来更改选项卡效果很好 并且在滚动视图中向下和向上滚动也可以 当我单击拖动滚动视
  • 以编程方式选择 uitableview 行

    我已经阅读了很多关于这个论点的内容 我已经测试了这个有效的例子 源代码示例 https github com vikingosegundo my programming examples tree master TwoTableViews
  • 如何以编程方式检测可用的 ssh 身份验证类型?

    我想编写一个监控插件来检查网络上的各个主机 以确保未启用密码或交互式 SSH 身份验证 也就是说 我需要编写以下代码 连接到 SSH 端口 枚举可用的身份验证方法 验证是否只能进行基于密钥的身份验证 使用 python 或 bourne s
  • 如何获取 Twitter API 列表中的所有用户?

    有没有办法访问列表中的所有成员 目前只能看到前20名会员 具体来说 我正在使用 python 和 tweepy 在 Tweepy 中 可以通过使用 Tweepy 提供的 Cursor 类来实现这一点 该类根据您所需的方法调用为返回给您的模型
  • ASP.NET MVC 3 RC 2 全球化客户端验证

    我的目标是根据用户的文化在客户端验证用户输入 我有一个具有以下结构的原始数据模型 public class User public int UserId get set Required StringLength 20 MinimumLen
  • 我们可以通过hiredis将C int数组设置为Redis中的键值吗?

    给定 int x 3 11 22 33 如何将其保存为键的值作为二进制数据并获取它 hiredis 给出了如何设置二进制安全字符串的示例 Set a key using binary safe API reply redisCommand
  • 无法在InitializeGL和paintGL之外调用OpenGL相关函数

    正如标题所示 在 Qt 内部 我无法使用或调用 QGLWidget 函数之外的任何 OpenGL 函数 例如initializeGL and paintGL 我正在尝试构建一个 3D 模型 在我的插槽之后QMainWindow类被称为 一切
  • JPA:设置参数后,如何获取/打印(类型化)查询后面的 JPQL 查询字符串?

    如何获取 打印 类型化 查询后面的 JPQL 查询字符串 即after参数已设置 例如用于调试目的 一个简单的toString 似乎没有做到这一点 Thanks 不存在 最终被转换为最终 SQL 的最终 JPQL 这样的事情 JPA 实现如
  • AWS RDS 的间歇性 SQL 连接问题

    目前 我们的 ASP NET 网站 基于 Sitecore 构建 遇到间歇性问题 该网站看似随机的 15 分钟内无法连接到 SQL Server 15 分钟后 问题自行解决 网站恢复正常 错误信息是 Exception System Dat
  • SAS proc sql返回group by/order by变量的重复值

    我有一些相当简单的 SQL 应该为每个资产每季度提供 1 行 相反 我每组得到多行 下面是 SQL SAS 数据步骤和一些输出数据 重复行数 在下面的数据中为 227708 等于 Num borrowers 即 asset1 的行数 pro