¡Claro!

Podemos incluirlo en un único proc sql:

proc sql;
    create table salida as     
    select t_entrada.sk_contrato,
           sum(t_entrada.saldo_impagado, -t_saldos.saldo_recuperado) as saldo_impagado
    from entrada as t_entrada
    inner join saldos_recuperados(where=(&fecha_negocio lt fecha_fv and &fecha_negocio ge fecha_iv)) as t_saldos
    on t_entrada.sk_contrato = t_saldos.sk_contrato
    order by sk_contrato desc;
quit;


Básicamente, estamos creando la tabla salida a partir de un left join de la tabla saldos_recuperados (filtrada por los valores de las variables fecha_fv y fecha_iv y la macrovariable fecha_negocio) a la tabla de entrada, y calculando un nuevo saldo_impagado ajustándolo minorando los de la tabla de entrada por los saldo_recuperado.
Si quisieras conservar mas variables de la tabla entrada, deberías añadirlas al select.

También te dejo el código con comentarios, por si lo prefieres:


proc sql;
    create table salida as  /*  Nueva tabla salida       */     
    select t_entrada.sk_contrato,        /*  listamos las variables a conservar de la tabla entrada      */
           sum(t_entrada.saldo_impagado, -t_saldos.saldo_recuperado) as saldo_impagado   /*  calculamos saldo_impagado minorandolo con saldo_recuperado de la tabla entrada      */
    from entrada as t_entrada   /* Indicamos tabla entrada    */     
    inner join saldos_recuperados(where=(&fecha_negocio lt fecha_fv and &fecha_negocio ge fecha_iv)) as t_saldos  /* Indicamos tabla saldos_recuperados, filtrada por los valores de las variables fecha_fv y fecha_iv y la macrovariable fecha_negocio    */  
    on t_entrada.sk_contrato = t_saldos.sk_contrato       /*  realizamos el cruce en función del sk_contrato  */  
    order by sk_contrato desc;  /*  ordenamos la tabla resultante     */     
quit;
ชัดเจน! เราสามารถรวมมันไว้ใน proc sql เดียว: proc sql; สร้างเอาต์พุตตารางโดยเลือก t_entry.sk_contract, sum(t_entry.unpaid_balance, -t_saldos.unpaid_balance) เป็น unpaid_balance จากรายการเป็น t_entry inner join recovery_balances(where=(&business_date lt fv_date and &business_date ge iv_date)) เป็น t_balances บน t_entry.sk_contract = t_balances สั่งซื้อ .sk_contract โดย sk_contract desc; ล้มเลิก; โดยพื้นฐานแล้ว เรากำลังสร้างตารางเอาต์พุตจากการรวมด้านซ้ายของตาราง recovery_balances (กรองโดยค่าของตัวแปร fv_date และ iv_date และ business_date macrovariable) ไปยังตารางอินพุต และคำนวณ unpaid_balance ใหม่โดยการปรับค่าโดยการลบเหล่านั้น จากอินพุตตารางสำหรับ recovery_balance หากคุณต้องการเก็บตัวแปรเพิ่มเติมจากตารางอินพุต คุณควรเพิ่มตัวแปรเหล่านั้นลงในตัวเลือก ฉันยังฝากรหัสไว้พร้อมความคิดเห็นในกรณีที่คุณต้องการ: proc sql; สร้างตารางเอาต์พุตเป็น /* ตารางเอาต์พุตใหม่ */ เลือก t_input.sk_contract, /* เราแสดงรายการตัวแปรที่จะเก็บจากตารางอินพุต */ sum(t_input.unpaid_balance, -t_saldos.recovered_balance) เป็น unpaid_balance /* เราคำนวณ unpaid_balance โดยการลด ด้วย recovery_balance ของตารางรายการ */ จากรายการเป็น t_entry /* เราระบุตารางรายการ */ เข้าร่วมภายใน recovery_balances(โดยที่=(&business_date lt fv_date และ &business_date ge iv_date)) เป็น t_saldos /* เราระบุตารางที่กู้คืนแล้ว กรองตามค่า ของตัวแปร fv_date และ iv_date และ macrovariable business_date */ บน t_entrada.sk_contrato = t_saldos.sk_contrato /* เราดำเนินการข้ามตาม sk_contrato */ ลำดับโดย sk_contrato desc; /* เรียงลำดับตารางผลลัพธ์ */ exit;
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence