I am trying to create a simple subtraction - I need to subtract one row of data from all the other rows. The best way I could think about doing this was to create a table segregating the line items I need to subtract and then join it to the table I need to subtract it from. When I join the tables it duplicates the line items (looks like it pulling the line items twice for each row.) I'm trying to get one row for each record. I have written CASE
| DFAST2017_SENS2_AD_BBB10Y | TDSAS_A | 1700587744.63 |
| DFAST2017_SENS2_AD_GDPR | TDSAS_A | 2524641512.12 |
| DFAST2017_SENS2_AD_UR | TDSAS_A | 1809725301.19 |
| DFAST2017_SENS2_AU_BBB10Y | TDSAS_A | 3054364731.83 |
| DFAST2017_SENS2_AU_GDPR | TDSAS_A | 2023551995.09 |
| DFAST2017_SENS2_AU_UR | TDSAS_A | 2866475522.15 |
| DFAST2017_SENS2_BD_BBB10Y | TDBS | 383260996.70 |
| DFAST2017_SENS2_BD_GDPR | TDBS | 397523601.08 |
| DFAST2017_SENS2_BD_UR | TDBS | 393753099.58 |
| DFAST2017_SENS2_BU_BBB10Y | TDBS | 409767402.79 |
| DFAST2017_SENS2_BU_GDPR | TDBS | 386205367.55 |
| DFAST2017_SENS2_BU_UR | TDBS | 404607525.42 |
| DFAST2017_TDBS | 383667322.80 | |
| DFAST2017_TDSAS_A | 2297107152.97 |
I segregated the line items out in another table
| DFAST2017_TDBS | TDBS | 383667322.8 |
| DFAST2017_TDSAS_A | TDSAS_A | 2297107153.0 |
When I join them, I get duplicated line items
| DFAST2017_SENS2_AD_BBB10Y | TDSAS_A | 1700587744.63 | . |
| DFAST2017_SENS2_AD_BBB10Y | TDSAS_A | 1700587744.63 | 2297107153.0 |
| DFAST2017_SENS2_AD_GDPR | TDSAS_A | 2524641512.12 | . |
| DFAST2017_SENS2_AD_GDPR | TDSAS_A | 2524641512.12 | 2297107153.0 |
| DFAST2017_SENS2_AD_UR | TDSAS_A | 1809725301.19 | . |
| DFAST2017_SENS2_AD_UR | TDSAS_A | 1809725301.19 | 2297107153.0 |
| DFAST2017_SENS2_AU_BBB10Y | TDSAS_A | 3054364731.83 | . |
| DFAST2017_SENS2_AU_BBB10Y | TDSAS_A | 3054364731.83 | 2297107153.0 |
| DFAST2017_SENS2_AU_GDPR | TDSAS_A | 2023551995.09 | . |
| DFAST2017_SENS2_AU_GDPR | TDSAS_A | 2023551995.09 | 2297107153.0 |
| DFAST2017_SENS2_AU_UR | TDSAS_A | 2866475522.15 | . |
| DFAST2017_SENS2_AU_UR | TDSAS_A | 2866475522.15 | 2297107153.0 |
| DFAST2017_SENS2_BD_BBB10Y | TDBS | 383260996.70 | . |
| DFAST2017_SENS2_BD_BBB10Y | TDBS | 383260996.70 | 383667322.8 |
| DFAST2017_SENS2_BD_GDPR | TDBS | 397523601.08 | . |
| DFAST2017_SENS2_BD_GDPR | TDBS | 397523601.08 | 383667322.8 |
| DFAST2017_SENS2_BD_UR | TDBS | 393753099.58 | . |
| DFAST2017_SENS2_BD_UR | TDBS | 393753099.58 | 383667322.8 |
| DFAST2017_SENS2_BU_BBB10Y | TDBS | 409767402.79 | . |
| DFAST2017_SENS2_BU_BBB10Y | TDBS | 409767402.79 | 383667322.8 |
| DFAST2017_SENS2_BU_GDPR | TDBS | 386205367.55 | . |
| DFAST2017_SENS2_BU_GDPR | TDBS | 386205367.55 | 383667322.8 |
| DFAST2017_SENS2_BU_UR | TDBS | 404607525.42 | . |
| DFAST2017_SENS2_BU_UR | TDBS | 404607525.42 | 383667322.8 |
| DFAST2017_TDBS | 383667322.80 | . | |
| DFAST2017_TDSAS_A | 2297107152.97 | . |
PROC SQL;
CREATE TABLE PCL_Sub AS
SELECT DISTINCT
t1.scenario_desc,
CASE WHEN t1.scenario_desc CONTAINS ('_TDSAS') THEN 'TDSAS_A'
WHEN t1.scenario_desc CONTAINS ('_TDBS') THEN 'TDBS' END AS TEST,
SUM((t1.'1'n - t1.'0'n + t2.'1'n)
+(t1.'2'n - t1.'1'n + t2.'2'n)
+(t1.'3'n - t1.'2'n + t2.'3'n)
+(t1.'4'n - t1.'3'n + t2.'4'n)
+(t1.'5'n - t1.'4'n + t2.'5'n)
+(t1.'6'n - t1.'5'n + t2.'6'n)
+(t1.'7'n - t1.'6'n + t2.'7'n)
+(t1.'8'n - t1.'7'n + t2.'8'n)
+(t1.'9'n - t1.'8'n + t2.'9'n)) AS Total
FROM WORK.ALLL t1
LEFT JOIN WORK.CHARGE_OFF t2 ON (t1.scenario_desc = t2.scenario_desc)WHERE t1.scenario_desc CONTAINS ('_TDBS')
OR t1.scenario_desc CONTAINS ('_TDSAS_A')
GROUP BY t1.scenario_desc, t2.scenario_desc, TEST
;
RUN;
PROC SQL;
CREATE TABLE PCL AS
SELECT DISTINCT
t1.scenario_desc,
CASE WHEN t1.scenario_desc CONTAINS ('SENS2_A') THEN 'TDSAS_A'
WHEN t1.scenario_desc CONTAINS ('SENS2_B') THEN 'TDBS' END AS TEST,
(t1.'1'n - t1.'0'n + t2.'1'n)
+(t1.'2'n - t1.'1'n + t2.'2'n)
+(t1.'3'n - t1.'2'n + t2.'3'n)
+(t1.'4'n - t1.'3'n + t2.'4'n)
+(t1.'5'n - t1.'4'n + t2.'5'n)
+(t1.'6'n - t1.'5'n + t2.'6'n)
+(t1.'7'n - t1.'6'n + t2.'7'n)
+(t1.'8'n - t1.'7'n + t2.'8'n)
+(t1.'9'n - t1.'8'n + t2.'9'n)AS Total,
CASE WHEN Calculated test = t3.test THEN t3.total END AS Total2
FROM WORK.ALLL t1
LEFT JOIN WORK.CHARGE_OFF t2 ON (t1.scenario_desc = t2.scenario_desc)
LEFT JOIN WORK.PCL_Sub t3 ON TEST = t3.TEST
;
RUN;
Add this WHERE clause to your last query:
where Total2 ne . ;
Thanks so much! This worked perfectly!
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and save with the early bird rate—just $795!
Get started using SAS Studio to write, run and debug your SAS programs.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.