csv - %MACRO 将 CSV 文件导入 SAS
问题描述
我有数百个 csv 文件需要作为 .sas7bdat 文件导入 SAS。我不想手动做,因为它很耗时。我正在尝试使用数据步骤在 SAS 中编写 %macro,但不知道如何为每个变量指定正确的格式和长度。我担心如果我错误地为其中一个变量指定了长度,那么某些数据将无法正确读取。
这是一个例子:
数据_1:
A,B,C,D,E
2, Paul Twix, 5/9/2015, 2, 238
2, Paul Twix, 5/10/2015, 3, 238
2, Paul Twix, 5/11/2015, 4, 238
数据_2:
A,B,C,D,E
2345678, Carolina Ferrera, 5/9/2015, 22, 123
2345678, Carolina Ferrera, 5/10/2015, 23, 123
2345678, Carolina Ferrera, 5/11/2015, 24, 123
我想先运行这段代码来确定最大长度,但我只能检查少数几个文件。
proc sql noprint ;
create table varlist as
select memname,varnum,name,type,length,format,format as informat,label
from dictionary.columns
where libname='WORK' and memname='Data_1'
;
quit;
当我有少量文件时,我可以手动调整字符变量的长度,但如果我有很多文件并且我根据第一个文件指定变量的格式,则会修剪一些变量。这是一个例子:
%macro import_main(inf,outdat);
DATA &outdat.;
INFILE &inf.
LRECL=32767 firstobs=2
TERMSTR=CRLF
DLM=','
MISSOVER
DSD ;
INPUT
A : ?? BEST1.
B : $CHAR9.
C : ?? MMDDYY9.
D : ?? BEST1.
E : ?? BEST3. ;
FORMAT C YYMMDD10.;
RUN;
%mend import_main;
filename inf1 'C:\SAS_data_1.csv';
filename inf2 'C:\SAS_data_2.csv';
%import_main(inf1, work.SAS_data_1);
%import_main(inf2, work.SAS_data_2);
此代码正确显示 SAS_data_1 的值,但错误地显示 SAS_data_2 中的字符串名称。
%macro 中有什么可以避免这个错误的吗?
谢谢你。
解决方案
推荐阅读
- python - 为什么我的代码在运行时没有改变?
- android - 使用 Jsoup 抓取 Instagram 公共视频和照片时出错
- sql - 仅执行提取的源 oracle 连接器阶段中的错误
- ios - 更新 UIViewRepresentable 中的绑定
- python - 潜在返回值列表的 Python 类型注释
- c++ - 此错误是什么意思:“错误 C2664 无法将争论 7 从 'TCHAR (*)[261]' 转换为 'LPSTR'
- immutability - dataclasses.dataclass freeze=True 的 Enthought Traits 等价物?
- ruby-on-rails - 如何将名为 status 作为字符串的新列添加到 ruby on rails 中的现有表中?
- python-3.x - 通过 PCA 对测试集进行相同的特征转换失败
- gradle - 如何在考虑相对路径的情况下使用多项目设置 settings.gradle 和 build.gradle