human
私はSASコードを持っています、そして、各ステップで何が行われているかを説明するコメントを追加してほしいです。


データ終了;
    入力を設定します。
    length_rectionedバランス。
    _n_ = 1の場合
    する;
      Hash Balances_Recを宣言します（データセット： "バランス
      balances_rec.definekey（ 'sk_contrato'）;
      balances_rec。
      balances_rec.definedone（）;
      call missing（balance_ record）;
    終わり;
    rc = balances_rec.find（）;
    balance_impaged = sum（balance_impaged、-saldo_recuperada）
走る;

sort data = output;
SK_CONTRATOの降下。
走る;
gpt
このSASコードは、入力データのセットと回復されたバランスデータセットから未払いの残高を計算することを目的としています。

    データセット「入力」を使用する「出力」と呼ばれる新しいデータセットが作成されます。
    変数「balance_rectioned」の長さが定義されています。
    最初のループ反復でのみ実行される「do」ブロックが始まります。
    ハッシュオブジェクトは、「balances_recuperados」と呼ばれるデータのサブセットを指す「saldos_rec」と呼ばれます。サブセットは、交渉日が「_FV日付」よりも少なく、「_iv」以上のランクに限定されています。
    キーキーは、「sk_contrato」として定義されます。
    ハッシュオブジェクトデータは、「sk_contrato」および「balance_rection」として定義されます。
    ハッシュオブジェクトの定義は終了します。
    「欠落」関数は、変数「balance_rection」に「欠落」値を割り当てるために呼び出されます。
    キーはハッシュオブジェクトに求められ、結果は変数「RC」に保存されます。
    未払いの残高は、「balance_impaid」と「balance_rectioned」のネガティブを追加することによって計算されます。
    ループが終了しました。
    「sk_contrato」変数によって「sort」プロシージャが「出力」データセットを降順で注文するために使用されます。
human
コード内にコメントを追加して、より読みやすくすることができます
gpt
ここに文書化されたコードがクリアされています
//データセット「入力」を使用する「出力」と呼ばれる新しいデータセットが作成されます。
データ終了;
    入力を設定します。
//変数「balance_rection」の長さが定義されています。
   length_rectionedバランス。
 _n_ = 1の場合
  //最初のループ反復でのみ実行される「do」ブロックが始まります。
 する;
      //ハッシュオブジェクトは、「balances_recuperados」と呼ばれるデータのサブセットを指す「saldos_rec」と呼ばれます。サブセットは、交渉日が「_FV日付」よりも少なく、「_iv」以上のランクに限定されています。
      Hash Balances_Recを宣言します（データセット： "バランス
      //キーキーは「sk_contrato」として定義されます。
      balances_rec.definekey（ 'sk_contrato'）;
     //ハッシュオブジェクトデータは、「sk_contrato」および「balance_rection」として定義されます。
      balances_rec。
     //ハッシュオブジェクトの定義が終了します。
      balances_rec.definedone（）;
      //「欠落」関数が呼び出され、「欠落している」値を変数「残高_レコード」に割り当てます。
      call missing（balance_ record）;
    終わり;
    //キーはハッシュオブジェクトで求められ、結果は変数「RC」に保存されます。
    rc = balances_rec.find（）;
    //無給の残高は、「balance_impaid」と「balance_rection」のネガティブを追加することによって計算されます。
    balance_impaged = sum（balance_impaged、-saldo_recuperada）
//バブルが終了しました。
走る;
//「ソート」手順を使用して、「sk_contrato」変数によって下降順に「出力」データセットを注文します。
sort data = output;
SK_CONTRATOの降下。
走る;
human
ありがとう！しかし今、彼らは私にPro SQLのみを使用してそうするように頼みました、あなたはまったく同じであるがproq SQLでのみコードを変更できますか？
gpt
クリア！

単一のSQLに含めることができます：

proc sql;
    テーブル出力を作成します
    t_entrada.sk_contratoを選択してください、
           sum（t_entrada.saldo_impagado、-t_saldos.saldo_recuperado）a_impaidバランスとして
    t_entradaとしての入力から
    内側の結合室
    on t_entrada.sk_contrato = t_saldos.sk_contrato
    sk_contrato descによる注文;
やめる;


基本的に、リゾートによるバランス入力の左結合から起動テーブルを作成しています。
エントリテーブルにさらに多くの変数を保持したい場合は、選択に追加する必要があります。

また、あなたが望む場合に備えて、コードをコメントで残します。


proc sql;
    テーブル出力を作成 / *新しい出発テーブル * /
    T_ENTENTRADA.SK_CONTRATOを選択します。
           sum（t_entrada.saldo_impagado、-t_saldos.saldo_recuperado）as balance_impaid / *入り口のバランスバランスでhinorでbalance_impaidを計算します * / /
    t_entrada / *として入力からテーブル入力を示します * /
    内側の結合balds_recuping（where =（＆date_negocio lt date_fv and＆date_negocio ge date_iv））as t_saldos / *表を示します。
    t_entrada.sk_contrato = t_saldos.sk_contrato / * sk_contrato * /に応じて交差点を実行します
    sk_contrato descによる注文;/ *結果のテーブルを注文します */
やめる;