0

我有两个表第一个帐户包含以下数据:

Code | Exposure | Expo_Curr | Limit | Limit_curr | Date_extr  

2105 | 2.354586 | EUR | 288.6 | HUF | 1405  
2105 | 25.46658 | USD | 12.32 | CAD | 1203  
2105 | 5.987456 | CAD | 321.2 | CZK | 1107  
2105 | 9.658785 | HRK | 5.365 | EUR | 1103  

第二张表由汇率组成

Code | date_extr | currency_from | currency_to | fx_rate  

2105 | 1405 | HUF | EUR | 4.36  
2105 | 1203 | USD | EUR | 3.62  
2105 | 1203 | CAD | EUR | 1.23  
2105 | 1107 | CAD | EUR | 1.17  
2105 | 1107 | CZK | EUR | 24.6  
2105 | 1103 | HRK | EUR | 35.6  

我需要创建表,其中ExposureLimit将根据第二个表中的汇率转换为 EUR 货币。如果数据已经是欧元,它应该只是乘以 1,其余的应该根据第二个表中的汇率计算。汇率也应与 date_extr 相匹配(当汇率有效时为 YYMM)。

应该是这样的:

Code | Exposure | Expo_Curr | Limit | Limit_curr | Date_extr  

2105 | 2.354586*1.00 | EUR | 288.6*4.36 | HUF | 1405  
2105 | 25.46658*3.62 | USD | 12.32*1.23 | CAD | 1203  
2105 | 5.987456*1.17 | CAD | 321.2*24.6 | CZK | 1107  
2105 | 9.658785*35.6 | HRK | 5.365*1.00 | EUR | 1103  

我正在研究 SAS,所以我尝试使用 SQL 连接来完成它,但我无法让它工作。如果有人可以帮助弄清楚我该怎么做?我有更多的列要像这样计算。

先感谢您。

4

2 回答 2

1

您只需要在 FX 表上左连接两次。一种用于限制,一种用于暴露。

例如

SELECT
  CASE
    WHEN acc.expo_curr = 'EUR'
    THEN acc.exposure
    ELSE acc.exposure * expo.fx_rate
  END AS exposure,
  acc.expo_curr,
  CASE
    WHEN acc.limit_curr = 'EUR'
    THEN acc.limit
    ELSE acc.limit * lim.fx_rate
  END AS limit,
  acc.limit_curr
FROM account acc
LEFT JOIN exchange expo
  ON  expo.date_extr = acc.date_extr
  AND expo.currency_from = acc.expo_curr
  AND expo.currency_to = 'EUR'
LEFT JOIN exchange lim
  ON  lim.date_extr = acc.date_extr
  AND lim.currency_from = acc.limit_curr
  AND lim.currency_to = 'EUR'
于 2016-08-05T09:48:04.110 回答
0

您可以采用哈希表方法,并将哈希键和相应的查找扩展到您需要的尽可能多的匹配变量:

数据要;
  如果 _n_ = 1 则执行;
    /* 定义和加载转换的哈希表 */
    长度货币_3 美元起。date_extr fx_rate 8. ;
    声明 hash exc (dataset:"exchange") ;
    exc.defineKey('currency_from','date_extr') ; /* 将其扩展到更多变量 */
    exc.defineData('fx_rate') ;
    exc.defineDone() ;
    调用missing(of currency_from--fx_rate);
  结尾 ;

  设置帐户;

  /* 在哈希表中查找 Expo_Curr + date_extr */
  rc = exc.find(key:expo_curr,key:date_extr) ; /* 扩展它以匹配 */
  如果 rc = 0 则执行;
    expo_rate = fx_rate ;
    曝光 2 = 曝光 * 曝光率;
  结尾 ;

  /* 在哈希表中查找 Limit_Curr + date_extr */
  rc = exc.find(key:limit_curr,key:date_extr) ; /* 扩展它以匹配 */
  如果 rc = 0 则执行;
    limit_rate = fx_rate ;
    限制 2 = 限制 * 限制速率;
  结尾 ;

  删除 rc ;
跑 ;

https://support.sas.com/documentation/cdl/en/lrdict/64316/HTML/default/viewer.htm#a003143739.htm

于 2016-08-05T12:09:37.450 回答