SAS 占位符值
SAS Placeholder value
我希望有一个灵活的导入结构到我的 SAS 代码中。从 excel 导入 table 如下所示:
data have;
input Fixed_or_Floating $ asset_or_liability $ Base_rate_new;
datalines;
FIX A 10
FIX L Average Maturity
FLT A 20
FLT L Average Maturity
;
run;
我正在使用的原始数据集如下所示:
data have2;
input ID Fixed_or_Floating $ asset_or_liability $ Base_rate;
datalines;
1 FIX A 10
2 FIX L 20
3 FIX A 30
4 FLT A 40
5 FLT L 30
6 FLT A 20
7 FIX L 10
;
run;
占位符 "Average Maturity" 仅在新利率由债券的平均到期日确定时才存在于 excel 文件中。我为此有一个单独的功能,它允许我搜索然后根据最接近的利率加入新的基本利率。举个例子,如果债券的期限是 10 年,我将使用 10 年的利率。
所以我的问题是,如何使用与此类似的代码执行简单的合并:
proc sort data = have;
by fixed_or_floating asset_or_liability;
run;
proc sort data = have2;
by fixed_or_floating asset_or_liability;
run;
data have3 (drop = base_rate);
merge have2 (in = a)
have1 (in = b);
by fixed_or_floating asset_or_liability;
run;
目前的问题是我的占位符值没有读入,我需要它是一个词,因为这就是 excel 在其查找中的工作方式 table - 然后我使用 if 语句,例如
if base_rate_new = "Average Maturity" then do;
(Insert existing Function Here)
end;
所以请只导入带有占位符函数的 excel,谢谢。
TIA。
我不能 100% 确定此行为是否与您从 excel 导入数据后的数据显示方式一致,但如果我 运行 您的代码创建 have
我明白了:
NOTE: Invalid data for Base_rate_new in line 145 7-13.
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+--
145 FIX L Average Maturity
Fixed_or_Floating=FIX asset_or_liability=L Base_rate_new=. _ERROR_=1 _N_=2
NOTE: Invalid data for Base_rate_new in line 147 7-13.
147 FLT L Average Maturity
Fixed_or_Floating=FLT asset_or_liability=L Base_rate_new=. _ERROR_=1 _N_=4
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.
NOTE: The data set WORK.HAVE has 4 observations and 3 variables.
基本上是说,当您尝试将字符串导入为数字时,它无法做到,因此将它们保留为空值。如果我们打印 table 我们可以看到空值:
proc print data=have;
run;
结果:
Fixed_or_ asset_or_ Base_
Floating liability rate_new
FIX A 10
FIX L .
FLT A 20
FLT L .
假设这确实是您的数据的样子,那么我们可以使用合并功能来实现您的目标。
data have3 (drop = base_rate);
merge have2 (in = a)
have (in = b);
by fixed_or_floating asset_or_liability;
base_rate_new = coalesce(base_rate_new,base_rate);
run;
这样做的结果是 table:
Fixed_or_ asset_or_ Base_
ID Floating liability rate_new
1 FIX A 10
3 FIX A 10
2 FIX L 20
7 FIX L 20
4 FLT A 20
6 FLT A 20
5 FLT L 30
合并函数基本上 returns 它可以在您传递给它的参数中找到的第一个非空值。因此,当 base_rate_new
已经有一个值时,它会使用该值,如果没有,它会使用 base_rate
字段。
我希望有一个灵活的导入结构到我的 SAS 代码中。从 excel 导入 table 如下所示:
data have;
input Fixed_or_Floating $ asset_or_liability $ Base_rate_new;
datalines;
FIX A 10
FIX L Average Maturity
FLT A 20
FLT L Average Maturity
;
run;
我正在使用的原始数据集如下所示:
data have2;
input ID Fixed_or_Floating $ asset_or_liability $ Base_rate;
datalines;
1 FIX A 10
2 FIX L 20
3 FIX A 30
4 FLT A 40
5 FLT L 30
6 FLT A 20
7 FIX L 10
;
run;
占位符 "Average Maturity" 仅在新利率由债券的平均到期日确定时才存在于 excel 文件中。我为此有一个单独的功能,它允许我搜索然后根据最接近的利率加入新的基本利率。举个例子,如果债券的期限是 10 年,我将使用 10 年的利率。
所以我的问题是,如何使用与此类似的代码执行简单的合并:
proc sort data = have;
by fixed_or_floating asset_or_liability;
run;
proc sort data = have2;
by fixed_or_floating asset_or_liability;
run;
data have3 (drop = base_rate);
merge have2 (in = a)
have1 (in = b);
by fixed_or_floating asset_or_liability;
run;
目前的问题是我的占位符值没有读入,我需要它是一个词,因为这就是 excel 在其查找中的工作方式 table - 然后我使用 if 语句,例如
if base_rate_new = "Average Maturity" then do;
(Insert existing Function Here)
end;
所以请只导入带有占位符函数的 excel,谢谢。
TIA。
我不能 100% 确定此行为是否与您从 excel 导入数据后的数据显示方式一致,但如果我 运行 您的代码创建 have
我明白了:
NOTE: Invalid data for Base_rate_new in line 145 7-13.
RULE: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+--
145 FIX L Average Maturity
Fixed_or_Floating=FIX asset_or_liability=L Base_rate_new=. _ERROR_=1 _N_=2
NOTE: Invalid data for Base_rate_new in line 147 7-13.
147 FLT L Average Maturity
Fixed_or_Floating=FLT asset_or_liability=L Base_rate_new=. _ERROR_=1 _N_=4
NOTE: SAS went to a new line when INPUT statement reached past the end of a line.
NOTE: The data set WORK.HAVE has 4 observations and 3 variables.
基本上是说,当您尝试将字符串导入为数字时,它无法做到,因此将它们保留为空值。如果我们打印 table 我们可以看到空值:
proc print data=have;
run;
结果:
Fixed_or_ asset_or_ Base_
Floating liability rate_new
FIX A 10
FIX L .
FLT A 20
FLT L .
假设这确实是您的数据的样子,那么我们可以使用合并功能来实现您的目标。
data have3 (drop = base_rate);
merge have2 (in = a)
have (in = b);
by fixed_or_floating asset_or_liability;
base_rate_new = coalesce(base_rate_new,base_rate);
run;
这样做的结果是 table:
Fixed_or_ asset_or_ Base_
ID Floating liability rate_new
1 FIX A 10
3 FIX A 10
2 FIX L 20
7 FIX L 20
4 FLT A 20
6 FLT A 20
5 FLT L 30
合并函数基本上 returns 它可以在您传递给它的参数中找到的第一个非空值。因此,当 base_rate_new
已经有一个值时,它会使用该值,如果没有,它会使用 base_rate
字段。