设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1388|回复: 0

深入理解SAS之批量数据导入

[复制链接]

26

主题

207

金钱

343

积分

入门用户

发表于 2019-6-21 13:36:44 | 显示全部楼层 |阅读模式

1.准备一份文件名数据集
读取某个文件夹下的文件名,这在R中再简单不过了。直接一个dir()函数搞定。
当然,我们要做的还要稍微复杂一些。我们需要读取原文件名in_name,并提供相应的SAS数据集文件名out_name。然而,我们傲娇的SAS在文件名命名的时候,不像R那么随心所欲。它有着这样那样的规矩。如:文件名不能超过32个字符;文件名内不能含小数点.。很不幸的是,博主要处理的数据恰好含有小数点.。所以,输出文件名不能直接使用原文件名。

代码:
  1. library(stringr)

  2. ## .dat文件名保存
  3. filename<-dir("F:/Morgage/raw_data/lars__final_year_dat")

  4. Name<-sub("(\\.dat)","",filename,ignore.case = TRUE)
  5. OutName<-str_replace_all(pattern = "\\.",replacement = "_",string = Name)

  6. FileNameList<-data.frame(cbind(Inname = filename, OutName = OutName))

  7. write.table(x = FileNameList,file = "F:/Morgage/raw_data/DAT_FileNameList.csv",
  8.           row.names = FALSE,col.names = FALSE,sep = ' ')
复制代码


当然,如果你说一定要用SAS全程搞定,那也不是不可能。这里提供一行SAS暗黑代码。
  1. X "dir F:\Morgage\raw_data\lars__final_year_dat\*.dat/b >F:\Morgage\raw_data\lars__final_year_dat\filename" ;
复制代码


通过X命令,执行命令提示符语句。首先,通过dir命令切换到F:\Morgage\raw_data\lars__final_year_dat\*.dat;接着,通过管道操作符>把同类型的.dat格式文件的文件名输出到文件夹F:\Morgage\raw_data\lars__final_year_dat\下的filename文件中。

2.写一个读入数据的宏
  1. %macro readfile_dat(v_dir,in_name,out_name);
  2.         /*?????????????v_dir,???????in_name,????SAS???????out_name*/
  3.         %let dir = &v_dir;
  4.         %let gsm= &in_name;
  5.         %let filename = "&dir&gsm";
  6.         libname Mor_dat 'F:\Morgage\sas_data\dat';

  7.         data Mor_dat.&out_name;
  8.                
  9.                 infile &filename;

  10.                 input variable ; /*此处省略一万个变量的输入格式*/

  11.         run;
  12.        
  13. %mend readfile_dat;
复制代码


3.利用数据步实现循环读取数据集
这一步是一个技巧活。这里,读入第一步中创建的数据集,并将每一行得到的变量值作为参数传给第二步中读取我们所需要处理的数据集的宏。
  1. data _null_;
  2.         length in_name $ 19 out_name $ 15;
  3.         infile "F:\Morgage\raw_data\DAT_FileNameList.csv"  dsd delimiter=' ';
  4.         input in_name $  out_name $ ;
  5.         call execute(compress('%readfile_dat(F:\Morgage\raw_data\lars__final_year_dat\,'||in_name||','||out_name||')'));

  6. run;
复制代码


最后,可以用proc print过程检查一下读取是否正确。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表