【发布时间】:2021-03-09 07:06:18
【问题描述】:
假设我们有一个数据目录C:\temp\,其中包含数百个 Excel 文件,例如isin47.xls 和 isin11.xls。在每个 Excel 文件中,我想提取单元格 $E$16 的值并创建一个长表 result,如下所示,假设文件在该单元格中分别具有 299792458 和 662607004 作为值。
isin value_euro
47 299792458
11 662607004
如何在 SAS 中最有效地做到这一点?
到目前为止,我的想法是以下算法:
- 循环遍历目录中的所有文件并创建一个包含所有名称的表
myExcels,请参阅How to iterate through files in SAS? - 循环
myExcels并使用类似的代码导入它们中的每一个
proc import
datafile="C:\temp\isin47.xls"
dbms=excelcs
out=data_current_isin
replace;
run;
proc sql;
select Value_found_in_E_1 into: value trimmed
from data_current_isin
where Value_found_in_D_1 = "Value_found_in_D_13";
quit;
%put ISIN 47 has value of &value. Euro;
- 收集表
results中的所有&value.。
这种方法存在问题,它依赖于 Excel 单元格 $D$1、$E$1 和 $D$13 中的值,通常情况并非如此,除非我编写 VBA 宏来填充单元格(我想要避免支持纯 SAS 解决方案)。
期待任何cmets或建议。
PS @allOutsideFinance:ISIN 唯一地定义了金融资产。
【问题讨论】:
-
我刚刚发现blogs.sas.com/content/sasdummy/2018/06/21/read-excel-range 似乎允许我导入自定义范围(因此也可以导入单个单元格)。但是,此方法使用
dbms=xlsx,同事告诉我要避免使用。我现在试图理解为什么我应该在我当前的项目中使用dbms=excelcs。 -
PROC IMPORT 的
RANGE=语句与DBMS=XLS源一起使用。你尝试了什么?你是如何指定范围的? -
我会继续尝试,并在接下来的几个小时内展示更多代码...