我试图将变量的值设置为另一个变量的值,然后重命名原始变量,然后使用以下代码进行合并:(MK_RETURN_DATA
是RETURNOUTSET
的子集.I只是想将MK_RETURN_DATA
与RETURNOUTSET
合并为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
。
发生什么事了?
答案 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'记录,那么您也可能遇到此合并问题。