ここに文書化されたコードがクリアされています
//データセット「入力」を使用する「出力」と呼ばれる新しいデータセットが作成されます。
データ終了;
    入力を設定します。
//変数「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の降下。
走る;
clara aquí esta el código documentado
//Se crea un nuevo conjunto de datos llamado "salida" que utiliza los datos del conjunto de datos "entrada".
data salida;
    set entrada;
//Se define la longitud de la variable "saldo_recuperado".
   length saldo_recuperado;
 if _N_ = 1 then
  //Se inicia un bloque "do" que se ejecutará solo en la primera iteración del bucle.
 do;
      //Se declara un objeto hash llamado "saldos_rec" que apunta a un subconjunto de datos llamado "saldos_recuperados". El subconjunto se limita a aquellas filas donde la fecha de negociación es menor que "fecha_fv" y mayor o igual a "fecha_iv".
      declare hash saldos_rec(dataset: "saldos_recuperados(where=(&fecha_negocio lt fecha_fv and &fecha_negocio ge fecha_iv))");
      //Se define la clave del objeto hash como "sk_contrato".
      saldos_rec.definekey('sk_contrato');
     // Se definen los datos del objeto hash como "sk_contrato" y "saldo_recuperado".
      saldos_rec.definedata('sk_contrato', 'saldo_recuperado');
     //Se finaliza la definición del objeto hash.
      saldos_rec.definedone();
      //Se llama a la función "missing" para asignar el valor "missing" a la variable "saldo_recuperado".
      call missing(saldo_recuperado);
    end;
    //Se busca la clave en el objeto hash y se almacena el resultado en la variable "rc".
    rc = saldos_rec.find();
    //Se calcula el saldo impagado sumando "saldo_impagado" y el negativo de "saldo_recuperado".
    saldo_impagado=sum(saldo_impagado,-saldo_recuperado)
//se finaliza el buble.
run;
//Se utiliza un procedimiento "sort" para ordenar el conjunto de datos "salida" en orden descendente por la variable "sk_contrato".
proc sort data=salida;
by sk_contrato descending;
run;