SAS设置一个等于另一个变量的变量,重命名它,然后合并

时间:2017-06-14 15:32:26

标签: sas

我试图将变量的值设置为另一个变量的值,然后重命名原始变量,然后使用以下代码进行合并:(MK_RETURN_DATARETURNOUTSET的子集.I只是想将MK_RETURN_DATARETURNOUTSET合并为MK_RETURN_DATA重命名的一个变量。

  data RETURNOUTSET;
    CUM_RETURN  = return_sec;
  run; 

  PROC SQL;
    CREATE TABLE MK_RETURN AS
      SELECT a.*
      FROM 
        RETURNOUTSET a
      WHERE a.SYMBOL = 'SPY';
  QUIT;

  DATA MK_RETURN_DATA;
    SET MK_RETURN;
    RENAME RETURN_SEC=MK_RETURN_RATE;
    DROP SYMBOL;
  RUN;

  proc sort data=MK_RETURN_DATA; by Date Time; run;
  proc sort data=RETURNOUTSET; by Date Time; run;

  data WITH_MARKET;
    merge RETURNOUTSET(IN=C) MK_RETURN_DATA(IN=D);
    by Date Time;
    if C;
  run;

但是,我在WITH_MARKET中带有符号“A”的第一个数据块中得到了非常奇怪的结果。 CUM_RETURN的值实际上等于MK_RETURN_RATE的值,而我希望它是return_sec

发生什么事了?

2 个答案:

答案 0 :(得分:1)

到目前为止,您所做的一切与此一个datastep相同。您将RETURN_SEC放入CUM_RETURN,过滤到SYMBOL ='SPY',并将RETURN_SEC重命名为MK_RETURN_RATE。

 DATA MK_RETURN_DATA;
    SET returnoutset(where=(symbol='SPY'));
    cum_return = return_sec;
    RENAME RETURN_SEC=MK_RETURN_RATE;
    DROP SYMBOL;
  RUN;

所以......就我所知,CUM_RETURN等于MK_RETURN_RATE等于前一个RETURN_SEC。你究竟想做什么?

答案 1 :(得分:1)

您应该可以使用数据集选项执行此操作。 首先确保数据已排序。

proc sort data=RETURNOUTSET; by Date Time; run;

然后将该数据集与自身合并,并使用适当的KEEP,RENAME和WHERE数据集选项选择要合并到原始数据的正确记录。

data WITH_MARKET;
merge RETURNOUTSET(IN=C) 
      RETURNOUTSET(IN=D 
                   keep=symbol return_sec date time
                   rename=(symbol=x_symbol return_sec=MK_RETURN_RATE)
                   where=(x_symbol='SPY')
                  )
;
by Date Time;
if C;
drop x_symbol ;
run;

如果原始数据中的所有DATE TIME值都没有SYMBOL ='SPY'记录,则合并可能不起作用。或者,如果您有相同DATE TIME值的多个SYMBOL ='SPY'记录,那么您也可能遇到此合并问题。