楼主: reduce_fat
911 17

[有偿编程] SAS数据整合结果问题 [推广有奖]

荣誉版主

海外论坛首席管理员

泰斗

25%

还不是VIP/贵宾

-

TA的文库  其他...

海外原创经济论文和写作技巧

威望
11
论坛币
3567509 个
通用积分
33978.7033
学术水平
6811 点
热心指数
7170 点
信用等级
6642 点
经验
1322 点
帖子
11989
精华
78
在线时间
1842 小时
注册时间
2011-6-13
最后登录
2024-4-20

一级伯乐勋章 初级热心勋章 初级学术勋章 中级热心勋章 中级学术勋章 高级学术勋章 初级信用勋章 特级学术勋章 高级热心勋章 中级信用勋章 特级热心勋章 高级信用勋章 特级信用勋章

78论坛币
有个小问题麻烦各位SAS高手一下。 楼主好几年没用SAS了,所以一些基础步骤忘了。

描述一下问题。 下边有三个数据表格。 这个问题主要是合并最后的总结结果到一个表格里,这个合成的表格只需每个表格的名字,销售的订单数量和销售的总额。

比如:

表格名字          订单数量    订单数额
第一个表格        15                2000
第二个表格        25                 3000
第三个表格        10                 1500
整合后的第三个表格  5              800

(注意只有这一个整合后的第三个表格才考虑每个订单的销售日期要在前两个表格里都一样的数据才被统计进去。其他表格即使有一个订单拥有两个不同的销售日期和数额,也要全部算进去。)

我可以用 proc sql 的程序把每个表格里的订单数量和订单数额算出来,但是用 union all 整合后表格名字,订单数量,还有订单数额那一行就是空白的。怎么把变量名字加上去?

这个用data steps 怎么做需要先用 proc sort 把每个表格里按订单号码排序吗? 然后再merge 这样可以定义新变量:表格名字,订单数量,和订单数额?

请把proc sql 和 data steps 的方法 详细的 SAS Codes 再下方回帖里告诉我,我实验一下,谢谢啦。 金币不是问题。

-------------------------

第一个表格有15行销售记录,每行有订单号码和销售日期和数额。

第二个表格有25行销售记录,每行有订单号码和销售日期和数额。

第三个表格有10行销售记录,每行有前两个表格里共同出现的订单号码,但是同一个订单可以有不同的销售日期和数额。

第三个表格整合后有 5行销售记录,因为每行不但要有前两个表格里共同出现的订单号码,还要确保每个订单的销售日期在前两个表格里也是一样的,所以从10行减少到5行销售记录。

比如说一个订单A同时出现在前两个表格里, 但是第一个表格显示销售日期是 2022/10/12,数额是195,但是第二个表格显示销售日期是 2022/10/15,数额是212。 到底哪个表格的数据是对的我不知道,这个得问提供数据的人,我只是把他们整合起来。

这个问题主要是数据部门没整合号导致的,让我来处理。


最佳答案

HXAI102230 查看完整内容

1.out_loc 是自定义的库名,可以根据libref命名规则换成其他符合条件的字符; 2.printto后未带库名,默认的输出路径是指上面libname 里定义的那个存放的结果输出路径。
关键词:数据整合 Data step proc sql Steps Union
复制粘贴积分链接 https://bbs.pinggu.org/ext8_airdrop.php?airdropfrom^^uid=2669999
沙发
HXAI102230 在职认证  发表于 2023-1-7 09:23:01 |只看作者 |坛友微信交流群
reduce_fat 发表于 2023-1-10 11:08
我明白了,但是为啥libname 开始的时候要用 out_loc 来定义结果输出路径呢? 为什么不是别的呢? 这个是S ...
1.out_loc 是自定义的库名,可以根据libref命名规则换成其他符合条件的字符;
2.printto后未带库名,默认的输出路径是指上面libname 里定义的那个存放的结果输出路径。

使用道具

藤椅
HXAI102230 在职认证  发表于 2023-1-7 12:01:09 |只看作者 |坛友微信交流群
数据表格可以提供一下吗?

使用道具

板凳
reduce_fat 发表于 2023-1-7 12:24:13 |只看作者 |坛友微信交流群
HXAI102230 发表于 2023-1-7 12:01
数据表格可以提供一下吗?
没有啊, 这个你看描述可以构造一个虚拟的,我主要看SAS 代码,这样根据实际情况修改后用到我的实例中。 就是四组数据,不需要实际数字。

使用道具

报纸
HXAI102230 在职认证  发表于 2023-1-7 14:25:19 |只看作者 |坛友微信交流群
proc sql;
create table 第三个表格 as
select count(distinct 订单号码) as 订单数量,sum(订单数额) as 总额
from
(select * from 表格1,表格2 where 表格1.订单号码=表格2.订单号码);

create table 整合后的第三个表格 as
select count(distinct 订单号码) as 订单数量,sum(订单数额) as 总额
from
(select * from 表格1,表格2 where 表格1.订单号码=表格2.订单号码 & 表格1.销售日期=表格2.销售日期);
quit;

使用道具

地板
reduce_fat 发表于 2023-1-8 02:01:22 |只看作者 |坛友微信交流群
HXAI102230 发表于 2023-1-7 14:25
proc sql;
create table 第三个表格 as
select count(distinct 订单号码) as 订单数量,sum(订单数额)  ...
你能否帮我把这四组数据的总结合在一个表格里就像下面的模板一样。这是最终要用的。 谢谢。 这是四个proc sql 的合成表格,我用union all 把他们合起来但是不能重新命名合成后的变量名字。 所以你可以用data steps 帮我合成表格后命名,或者你能再proc sql 结果合成后再建立一个行下方红色的新变量名字也可以。 谢谢。

表格名字          订单数量    订单数额

第一个表格        15                2000
第二个表格        25                 3000
第三个表格        10                 1500
整合后的第三个表格  5              800

使用道具

7
HXAI102230 在职认证  发表于 2023-1-8 15:32:13 |只看作者 |坛友微信交流群
proc sql;
  create table 最终表格 as
  select "第一个表格" as 表格名字,count(*) as 订单数量,sum(订单数额) as 订单数额
        from         表格1
        union
        select "第二个表格" as 表格名字,count(*) as 订单数量,sum(订单数额) as 订单数额
        from         表格2
        union
        select "第三个表格" as 表格名字,count(*) as 订单数量,sum(订单数额) as 订单数额
  from (select * from 表格1,表格2 where 表格1.订单号码=表格2.订单号码)
        union
        select "整合后的第三个表格" as 表格名字,count(*) as 订单数量,sum(订单数额) as 订单数额
  from (select * from 表格1,表格2 where 表格1.订单号码=表格2.订单号码 & 表格1.销售日期=表格2.销售日期);
quit;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
reduce_fat + 5 + 5 + 5 精彩帖子

总评分: 学术水平 + 5  热心指数 + 5  信用等级 + 5   查看全部评分

使用道具

8
reduce_fat 发表于 2023-1-9 03:47:03 |只看作者 |坛友微信交流群
HXAI102230 发表于 2023-1-8 15:32
proc sql;
  create table 最终表格 as
  select "第一个表格" as 表格名字,count(*) as 订单数量,sum ...
我就是那么弄的用的union all 但是问题是表格名字那一栏显示自定义名称无名字。 得需要重新定义一个名字,就是上面红字变量名字那一列,叫的不是表格名字而是自定义名字 1。 还有订单数量那一列变量名字也是自定义名字 2 而不是订单数量。 如果我在 count(*) 后面加上订单数量程序说我不能这样因为没有 group by 但是一个表格只有一行总数:订单总量和销售总额,所以我加不了 group by 就算加上也是出错,所以不能在 count(*) 后面加订单数量的名字更改。同理销售总额那个 sum() 后面也不能加变量名字更改。

你能否加一行定义表格名字,订单数量,和销售总额,再把union 合成的四个sql 表格后随机产生的自定义名字label 换掉? 谢谢。

使用道具

9
reduce_fat 发表于 2023-1-10 00:49:25 |只看作者 |坛友微信交流群
HXAI102230 发表于 2023-1-8 15:32
proc sql;
  create table 最终表格 as
  select "第一个表格" as 表格名字,count(*) as 订单数量,sum ...
你明白我的意思了吗? 我用英文版的SAS 跑出来显示这样的自定义变量名字而不是我想要的表格名字,订单数量,和销售数额。

_TEMA010     _TEMA011     _TEMA012

第一个表格        15                2000
第二个表格        25                 3000
第三个表格        10                 1500
整合后的第三个表格  5              800

使用道具

10
albertwishedu 发表于 2023-1-10 08:51:02 |只看作者 |坛友微信交流群
那个 as 后面就是你要的表格名字咯

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 11:53