所以我有一个相对复杂的过程,可以从netezza数据仓库中提取大量数据。我的任务是在流程中添加两个新字段,并经历了通常的繁琐操作,即将新字段添加到每个类别,组,依据等等。尽管字段通过,但我始终将数据运行高达~12%。
作为一个诊断工具,我在插入或合并新数据的每个子句之后插入了proc摘要,并将其分离为两个proc SQL语句
proc sql;
create table ACTUALALL_CD2 as
select stay_y, timeframe, daysout, Stay_mo
from ACTUALALL_CD
where stay_y = &curyr
group by stay_y, timeframe, daysout, Stay_mo
order by daysout, Stay_mo;
quit;
proc sort data=ACTUALALL_CD2 nodupkey;
by stay_y timeframe daysout Stay_mo;
run;
proc sql;
create table ACTUALALL_CD3 as
select
a.WeekN, a.timeframe, a.timen, a.week, a.daysout,
a.wdwe,a.marsha, a.room_pool_cd, a.cd_tier_rpgm, a.month_cal_id,
a.market_prefix_cd , a.yrpd2, a.stay_y, b.Stay_mo,a.Curr_code,
a.fxmonth, a.fxrate,a.yrpd, a.yrmon, a.Month,
a.RN_TY as RNTY, a.rev_ty as RVTY, a.USDRVTY, a.RVTY_CDUS,
a.Holiday_date, a.RN_LY as RNLY,
a.rev_ly as RVLY, a.USDRVLY, a.RVLY_CDUS
from ACTUALALL_CD a
inner join ACTUALALL_CD2 b
on b.daysout = a.daysout;
quit;
在我的原始代码中,我从daysout字段中丢失了一个值(值为1-18的字段中的值为7)(我想要这样做)并且反过来会削减我的输出值。相比之下,这段代码(此代码和遗留代码之间的差异是添加的值a.room_pool_cd和a.cd_tier_rpgm)。
我需要弄清楚如何使这个代码也切掉这个值。我和两个人结合了40年的sas经验并且他们做得很短。我们非常感谢您对编辑或重写的建议。
答案 0 :(得分:0)
在提供的查询中看起来没什么异常,所以我建议以下内容以确保:
error:
或warning:
或repeats of BY values
字样。如果这些都不起作用,那么解决它的真正方法是识别具有不同计数的密钥(在原始查询和新查询之间)。将原始查询和新查询限制为只有(一个)这些键并从那里开始调试。从新查询中删除内容,直到记录数量达到预期结果,然后您就找到了问题。这是隔离和解决问题的一种保证方法,但不是人们一直在寻找的快速解决方案。