SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 975|回复: 4
打印 上一主题 下一主题

求助:批量将外部文件导入SAS数据集

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2009-3-4 23:38:54 | 只看该作者

求助:批量将外部文件导入SAS数据集

如下需求,请教各位大侠如何实现!

需求:

外部文本格式的文件,实例格式如下:

---------------------------txt文件------------------------------------------
AD_CODE,VALUE,COUNT
141129,非空,546
371322,非空,3378
652925,非空,1001
500110,非空,272
350881,非空,973

AD_CODE,TYPECODE,COUNT
220283,180200,5
230123,130500,1
152201,061208,21
654202,061101,22
-------------------------------------------------------------------------------

每部分用空行标记,对空行内部分需要分别生成对应的SAS数据集,其中每一部分第一行为生成SAS数据集的变量名称,最后一个变量为数值型,如上例第二部分,AD_CODE及TYPECODE为变量名,且为字符型,COUNT为数值型变量。
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
沙发
发表于 2009-3-10 11:03:58 | 只看该作者

Re: 求助:批量将外部文件导入SAS数据集

每个部分的变量个数一样么?
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
板凳
发表于 2009-3-10 14:13:12 | 只看该作者

Re: 求助:批量将外部文件导入SAS数据集

比较傻的方法,如果个数一样的话,先读进来,拆成小数据集,output成小txt再读回来,可以少掉处理varname的步骤。
[code:3korqero]data WORK.test ;           
    infile 'D:\temp\test.txt' delimiter=',' MISSOVER DSD lrecl=32767 firstobs=1 ;
       informat v1-v3 $25. ;
       format v1-v3  $25. ;
    input  v1-v3  $;
run;
data _null_;
   do count=1 by 1 until (v1='' or last);
      set test end=last;
   end;
   lastobs+count;
   i+1;
   /*Data break*/
   call execute('data test' || compress(i) || ';');
   call execute('set test(firstobs=' || compress(lastobs-count+1) || ' obs=' || compress(lastobs) || ');');
   call execute('if v1^="";');
    /*output*/
    call execute('data _null_;
         set  test' || compress(i) || ';
         file "D:\temp\temp.txt" delimiter="09"x DSD DROPOVER lrecl=32767;
         put v1-v3 $;');
  /*Data in*/
   call execute ('PROC IMPORT OUT=TEST'||compress(i)||'  DATAFILE= "D:\temp\temp.txt"
    DBMS=DLM REPLACE;
     DELIMITER="09"x;
     GETNAMES=YES;
     DATAROW=2;');
         run;
run;[/code:3korqero]
回复 支持 反对

使用道具 举报

0

主题

0

帖子

2

积分

新手上路

Rank: 1

积分
2
地板
发表于 2009-3-10 14:38:44 | 只看该作者

Re: 求助:批量将外部文件导入SAS数据集

用transpose也行,但是还要专门把最后一个转成数字型。
[code:q486sls2]
data _null_;
   do count=1 by 1 until (v1='' or last);
      set test end=last;
   end;
   lastobs+count;
   i+1;
   /*Data break*/
   call execute('data temp;');
   call execute('set test(firstobs=' || compress(lastobs-count+1) || ' obs=' || compress(lastobs) || ');');
   call execute('if v1^="";');  
    /*transpose*/
    call execute('proc transpose data=temp out=temp(drop=_name_); var _all_;');
    call execute('proc transpose data=temp out=temp(drop=_name_);var col2-col4;id col1;');
    call execute('data TEST'||compress(i)||'(rename=( count1=count));');
    call execute('set temp;');
    call execute('count1=count*1;drop count;');  
  run; run; run;
[/code:q486sls2]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2009-6-30 13:16:22 | 只看该作者

Re: 求助:批量将外部文件导入SAS数据集

每个部分变量个数是不定的。

谢谢楼上几位的回复,虽没有最终解决问题,但是也是受益匪浅。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2026-2-5 19:38 , Processed in 0.068866 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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