以下是我写的一个宏,它忽略了连接两个数据集。
/*
* Macro to add the t-rate to the data
*/
%MACRO RFRATE(WITHOUT_RATE, WITH_RATE);
/*read the tbill rate data*/
data TBRATE;
INFILE "T-RATE/T-RATE-FORMATTED.csv"
DELIMITER = ","
MISSOVER DSD
FIRSTOBS=2
LRECL=32767;
INPUT DATE one_M three_M six_M one_Y two_Y three_Y five_Y seven_Y ten_Y twenty_Y thirty_Y;
format DATE yymmddn8.;
length Date 4;
run;
data &WITH_RATE;
merge &WITHOUT_RATE(IN=A) TBRATE(IN=B);
by Date;
if A;
run;
/*I have also tried the following way (SQL)*/
/*
PROC SQL;
Create table &WITH_RATE as
Select a.*,b.*
from
&WITHOUT_RATE a
left join
TBRATE b
on a.Date=b.Date;
quit;
*/
proc export data=&WITH_RATE (obs=99999)
outfile= 'samplesmall.csv'
dbms=CSV REPLACE;
putname=YES;
run;
proc contents data= TBRATE position;
run;
proc contents data= &WITHOUT_RATE position;
run;
%mend;
TBRATE 是一些类似于以下格式的数据:
| Date | Rate |
|----------|----------|
| 20120101 | 1.0 |
| 20120102 | 1.5 |
| 20120103 | 1.5 |
| 20120104 | 1.3 |
| 20120105 | 1.1 |
WITHOUT_RATE 是一些类似于以下的数据:
| Date | Other Data |
|----------|---------------|
| 20120101 | 7.0 |
| 20120101 | 3.5 |
| 20120101 | 4.5 |
| 20120101 | 2.3 |
| 20120101 | 11.1 |
| 20120102 | 23.0 |
| 20120102 | 12.5 |
| 20120102 | 12.5 |
| 20120102 | 11.3 |
| 20120102 | 11.1 |
我想创建类似于以下内容的内容:
| Date | Other Data | Rate |
|----------|---------------|----------
| 20120101 | 7.0 | 1.0 |
| 20120101 | 3.5 | 1.0 |
| 20120101 | 4.5 | 1.0 |
| 20120101 | 2.3 | 1.0 |
| 20120101 | 11.1 | 1.0 |
| 20120102 | 23.0 | 1.5 |
| 20120102 | 12.5 | 1.5 |
| 20120102 | 12.5 | 1.5 |
| 20120102 | 11.3 | 1.5 |
| 20120102 | 11.1 | 1.5 |
WITHOUT_RATE 中日期变量的格式为:
Variable Type Len Format Label
DATE Num 4 YYMMDDN8. Quote date
TBRATE 中日期变量的格式为:
Variable Type Len Format
DATE Num 4 YYMMDDN8.
看来他们是一样的。
但是,代码不断产生空结果:
| Date | Other Data | Rate |
|----------|---------------|----------
| 20120101 | 7.0 | |
| 20120101 | 3.5 | |
| 20120101 | 4.5 | |
| 20120101 | 2.3 | |
| 20120101 | 11.1 | |
| 20120102 | 23.0 | |
| 20120102 | 12.5 | |
| 20120102 | 12.5 | |
| 20120102 | 11.3 | |
| 20120102 | 11.1 | |
因此,我想知道我哪里出错了?
更新#2
The code used to call the macro:
/*The output dataset*/
%NBBO(20130102, tempoutputset);
%NBBOReturn(tempoutputset, NBBODATA);
%RFRATE(NBBODATA, RFRATEDATA);