首页 > 解决方案 > 在 SAS proc SQL 中重新创建 Tableau 函数已修复

问题描述

我正在努力将 Tableau 中执行的计算转移到基础 SAS 查询中执行,并且我很难重新创建 Tableau 详细信息级别函数 FIXED。下面是一个例子: { FIXED [ID_Field], [Group]: MAX([Value_Field]) } 表格计算是在每个 Group 中为每个人的 ID_Field 查找 Value_Field 的 MAX

我尝试使用子查询来复制它,所以我的查询看起来和操作是这样的

Proc SQL; Create table XYZ.Tableau_Calcs AS

SELECT 
Value Field
,ID_Field
,(Select MAX(Value_Field) 
 From XYX.Original_Calcs 
 group by ID_Field, Group) as SAS_Calc
,Group
,Date
,Flag
From XYX.Original_Calcs

但是,我收到一条错误消息“错误:子查询评估为不止一行。” 显然这意味着它生产的不止一条生产线

有谁知道如何解决这个错误?这是一些与我在工作中处理的数据具有相同结构的数据。

值字段 ID_字段 团体 日期 旗帜
56 25193T4010 H5 2018 年 10 月 31 日 1
56 25193T4010 H5 2019 年 1 月 28 日 1
38 25193T4010 N9 2019 年 2 月 9 日 0
38 73437H0904 E3 2017 年 7 月 6 日 1
38 73437H0904 E3 2017 年 3 月 14 日 1
48 73437H0904 H5 2018 年 8 月 14 日 1
48 73437H0904 H5 2018 年 10 月 15 日 1
66 91641V2912 H5 2018 年 10 月 1 日 0
66 91641V2912 H5 2019 年 11 月 1 日 1
98 91641V2912 N9 2019 年 3 月 1 日 1
98 91641V2912 N9 2019 年 3 月 1 日 1

标签: sasproc-sql

解决方案


PROC SQL 将让您计算聚合函数并保留详细的观察结果。它将自动将汇总值重新合并到该组的所有详细观察中。

data have;
  input value_field id_field :$10. group $ date :mmddyy. flag;
  format date yymmdd10.;
cards;
56 25193T4010 H5 10/31/2018 1
56 25193T4010 H5 1/28/2019 1
38 25193T4010 N9 2/9/2019 0
38 73437H0904 E3 7/6/2017 1
38 73437H0904 E3 3/14/2017 1
48 73437H0904 H5 8/14/2018 1
48 73437H0904 H5 10/15/2018 1
66 91641V2912 H5 10/1/2018 0
66 91641V2912 H5 11/1/2019 1
98 91641V2912 N9 3/1/2019 1
98 91641V2912 N9 3/1/2019 1
;

proc sql;
create table want as
  select
      id_field
    , group
    , max(value_field) as sas_calc
    , value_field
    , date
    , flag
  from have
  group by id_field, group
;
quit;

请注意,对于您的样本数据,新的 SAS_CALC 变量与每次观察时的当前 VALUE_FIELD 完全相同。


推荐阅读