楼主: wzhzhlion
3035 5

[统计软件] 求助 sas导入外部数据文件 [推广有奖]

  • 0关注
  • 0粉丝

初中生

14%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
339 点
帖子
13
精华
0
在线时间
2 小时
注册时间
2007-10-14
最后登录
2015-6-22

楼主
wzhzhlion 发表于 2015-6-22 11:19:27 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
各位大侠,本人需要读取.txt 文件,遇到些困难。
文件格式如下:
------------------------------------------------------------------------------
645401010101   
BLOCD.O4
不喜欢出去,不喜欢工作,不喜欢吃饭
------------------------------------------------------------------------------
645401010101   
BLEMPLOYM.EM7X
备注

------------------------------------------------------------------------------
645401010101   
BLIO.IO13
访谈结束
------------------------------------------------------------------------------
645401040204   
BLDEMOGRAP_DM.DM2oth
学徒
------------------------------------------------------------------------------
645401040204   
BLIO.IO13
访谈进行很顺利

其中第一行是样本编号,第二行是变量名,第三行是数据,最大的问题是第二行的变量名不一样,需要读成不同的变量名和相应的数据
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:数据文件 Ploy DEMO 各位大侠 GRAP

沙发
xiaopinge2013 发表于 2015-8-6 08:41:07
不要这样在txt里列,一条记录列一行,字段间用逗号隔开。
proc import datafile='你所在文件的路径名\**.txt'
out=逻辑库名.数据集名 replace;
getname=yes;
run;
proc print data=sasuser.test2;
run;
已有 1 人评分论坛币 学术水平 收起 理由
admin_kefu + 20 + 1 热心帮助其他会员

总评分: 论坛币 + 20  学术水平 + 1   查看全部评分

藤椅
汪政元 在职认证  发表于 2015-8-7 09:53:31
最近完成的宏代码,批量导入数据,根据情况进行数据集合并
  1.        
  2. %macro importdata(dirname,typ);        /*参数有2个:路径,文件类型后缀*/
  3. /*模块1--------------------------------【获取文件名】--------------------*/
  4.     %put %str(----------->dirname=&dirname)        ;
  5.     %put %str(----------->typ=&typ)                ;
  6. data temp_filename                             ;     
  7.             rc=filename("dir","&dirname")             ;/*把&dirname值传给文件引用符“dir"*/   
  8.             openfile=dopen("dir")                     ;/*得到路径标示符openfile,dopen是打开directory的sas内置函数*/
  9.             if openfile>0 then do                     ;/*如果openfile>0表示正确打开路径*/        
  10.                       nummem=dnum(openfile)                   ;/*得到路径标示符openfile中member的个数nummem,即指定目录下文件个数*/        
  11.                       do ii=1 to nummem                       ;           
  12.                          name=dread(openfile,ii)              ;/*用dread依次读取每个文件的名字到name*/           
  13.                          output                               ;/*依次输出*/        
  14.                       end                                     ;     
  15.             end                                       ;     
  16. /* keep name                                 ;*/
  17.                 /*只保留name列*/

  18. run ;

  19.          proc sort data = temp_filename             ;/*按照name排序*/     
  20.              by descending name                       ;
  21.              %if &typ^=all %then %do                  ;/*是否过滤特定的文件类型&typ*/     
  22.                where  index(upcase(name),upcase(".&typ"));/*y,则通过检索name是否包含&typ的方式过滤文件类型*/
  23.              %end                                           ;
  24.          run                                            ;

  25. /*-模块2-------------------------【将文件名存为宏变量】----------------*/
  26.          %local N;
  27.         proc sql noprint;
  28.                 select count(*) as cnt into:N
  29.                         from temp_filename ;
  30.         quit;
  31. /*        获取观测行数,也即导入的数据文件个数*/

  32.         data _null_;
  33.                         set  temp_filename  ;
  34.                         call symputx('y'||left(_n_),name);
  35.         run;
  36. /*        将文件名逐个存为临时宏变量*/
  37.                         %do i = 1 %to &N;
  38.                                 %local filenamelist;
  39.                                 %let filenamelist = &filenamelist. &&y&i ;/*对临时宏变量,对各文件名进行连接,各文件名以空格隔开*/
  40.                         %end;
  41.                         %put &filenamelist;
  42.   
  43. /*-模块3-------------------------【开始批量导入】----------------*/

  44.         %do j = 1 %to &N ;
  45.                         %let var&j = %sysfunc(trim(%scan(&filenamelist,&j,' ')));
  46.                         %put &&var&j;
  47. /*        数据导入-PS:这里以导入txt为例,tab分割,如导入excel需要修改为xls,附加dbms=xls*/
  48.                 PROC IMPORT OUT= temp&j
  49.                          DATAFILE= "&dirname.&&var&j"
  50.                             DBMS=TAB REPLACE;
  51.                      GETNAMES=YES;
  52.                      DATAROW=2;
  53.                 RUN;
  54.   %end;
  55. /*如果是同类型的表,则进行数据合并,根据需要而定*/
  56.                 data merge_temp;
  57.                         set
  58.                           %do j = 1 %to &N;
  59.                                   temp&j       
  60.                           %end;
  61.                         ;
  62.                 run;
  63. %mend;
复制代码
已有 1 人评分论坛币 收起 理由
admin_kefu + 35 热心帮助其他会员

总评分: 论坛币 + 35   查看全部评分

板凳
mathkkk 学生认证  发表于 2015-8-19 21:31:53
filename a '文件路径.txt';
options validvarname=any;
data b;
infile a;
length 变量1 $ 12 变量2 $ 20 变量3 $ 40;
input 变量1 $ / 变量2 $ / 变量3 $;
run;
proc print data=b;
run;
已有 1 人评分论坛币 收起 理由
admin_kefu + 15 热心帮助其他会员

总评分: 论坛币 + 15   查看全部评分

报纸
jeozu 发表于 2015-9-12 19:41:49
  1. data a;
  2. length var1 var2 $20. note $80.;
  3. infile datalines;
  4. input @'------------------------------------------------------------------------------' var1  / var2 $ / note $ @;
  5. datalines;
  6. ------------------------------------------------------------------------------
  7. 645401010101   
  8. BLOCD.O4
  9. 不喜欢出去,不喜欢工作,不喜欢吃饭
  10. ------------------------------------------------------------------------------
  11. 645401010101   
  12. BLEMPLOYM.EM7X
  13. 备注

  14. ------------------------------------------------------------------------------
  15. 645401010101   
  16. BLIO.IO13
  17. 访谈结束
  18. ------------------------------------------------------------------------------
  19. 645401040204   
  20. BLDEMOGRAP_DM.DM2oth
  21. 学徒
  22. ------------------------------------------------------------------------------
  23. 645401040204   
  24. BLIO.IO13
  25. 访谈进行很顺利
  26. ;
  27. run;
复制代码
如果需要导入var2的文件,那么添加一个infile filevar就可以了。
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

地板
shy836732411 发表于 2015-11-1 09:53:22
filename aa 'F:\sasprogram\P120.txt';
data p120;
   infile aa firstobs=2 dlm='09'x;
   input Y X1 X2 X3 X4 X5 X6;
run;
这个是导入txt 文件

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

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2026-1-1 10:13