楼主: xulimei1986
2528 10

下面的程序如何做循环或者一次性输入? [推广有奖]

  • 3关注
  • 0粉丝

博士生

68%

还不是VIP/贵宾

-

威望
0
论坛币
41 个
通用积分
0
学术水平
3 点
热心指数
8 点
信用等级
3 点
经验
22590 点
帖子
138
精华
0
在线时间
439 小时
注册时间
2012-3-20
最后登录
2019-5-11

楼主
xulimei1986 发表于 2013-5-6 13:36:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
问题如下:
     现需要将一个文件夹下的多个文件输出到同一个sas数据集中(文件的格式均一致,只是文件名称是按照日期来的),且文件名作为一个变量,已写出的程序如下。由于文件很多,由20121219~20130418,如果在datalines后面罗列出来的,整个程序会显的非常夸张,请教各位大神,是否可以写循环或者宏?怎么写呢?
data data1;
      input filedir : $40.;
          infile dummy filevar=filedir end=done dsd dlm='09'X;
          file_location=filedir;
          do until(done);
       informat VAR1 best32. ;                                                           
       informat VAR2 $20. ;                                                              
       informat VAR3 $20. ;                                                              
       informat VAR4 $40. ;                                                              
       informat VAR5 best32. ;                                                           
       informat VAR6 best32. ;                                                           
       informat VAR7 best32. ;                                                           
       informat VAR8 best32. ;                                                           
       informat VAR9 best32. ;                                                           
       informat VAR10 best32. ;                                                         
       informat VAR11 best32. ;                                                         
       informat VAR12 best32. ;                                                         
       informat VAR13 best32. ;                                                         
       informat VAR14 best32. ;                                                         
       informat VAR15 best32. ;                                                         
       informat VAR16 best32. ;                                                         
       informat VAR17 best32. ;                                                         
       informat VAR18 best32. ;                                                         
       informat VAR19 best32. ;                                                         
       format VAR1 best12. ;                                                            
       format VAR2 $20. ;                                                               
       format VAR3 $20. ;                                                               
       format VAR4 $40. ;                                                               
       format VAR5 best12. ;                                                            
       format VAR6 best12. ;                                                            
       format VAR7 best12. ;                                                            
       format VAR8 best12. ;                                                            
       format VAR9 best12. ;                                                            
       format VAR10 best12. ;                                                            
       format VAR11 best12. ;                                                            
       format VAR12 best12. ;                                                            
       format VAR13 best12. ;                                                            
       format VAR14 best12. ;                                                            
       format VAR15 best12. ;                                                            
       format VAR16 best12. ;                                                            
       format VAR17 best12. ;                                                            
       format VAR18 best12. ;                                                            
       format VAR19 best12. ;                                                            
    input                                                                                
                VAR1                                                                     
                VAR2 $                                                                  
                VAR3 $                                                                  
                VAR4 $                                                                  
                VAR5                                                                     
                VAR6                                                                     
                VAR7                                                                     
                VAR8                                                                     
                VAR9                                                                     
                VAR10                                                                    
                VAR11                                                                    
                VAR12                                                                    
                VAR13                                                                    
                VAR14                                                                    
                VAR15                                                                    
                VAR16                                                                    
                VAR17                                                                    
                VAR18                                                                    
                VAR19                                                                    
    ;
    output;
          end;
          datalines;
E:\data1\20121219_data1
E:\data1\20121220_data1
;
run;
二维码

扫码加我 拉你入群

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

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

关键词:一次性 informat Location informa format 程序 如何

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
rdwalk + 1 + 1 + 1 good quention!!!!!!!!!!!!!!!!!!!!!!!!!!!

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

家家有本难念的经,计较的少一点,会和睦许多!!

沙发
邓贵大 发表于 2013-5-6 14:13:10
how about some wildcard characters in your INFILE statement?
infile ("E:\data1\2012*_data1", "E:\data1\2013*_data1") dsd dlm='09'x;
Be still, my soul: the hour is hastening on
When we shall be forever with the Lord.
When disappointment, grief and fear are gone,
Sorrow forgot, love's purest joys restored.

藤椅
xulimei1986 发表于 2013-5-6 14:18:31
邓贵大 发表于 2013-5-6 14:13
how about some wildcard characters in your INFILE statement?
infile ("E:\data1\2012*_data1", "E:\da ...
按照你的试了下,程序报错~~
家家有本难念的经,计较的少一点,会和睦许多!!

板凳
ziyenano 发表于 2013-5-6 14:24:27
data data1;
          infile E:\data1\* dsd dlm='09'X;
          informat VAR1 best32. ;                                                           
       informat VAR2 $20. ;                                                              
       ...                                                        
       format VAR1 best12. ;                                                            
       ...                                                         
    input                                                                                
                VAR1                                                                     
       ...                                                         
    ;
run;
/*前提是文件没有变量名,所有文本文件都在E:\data1文件夹中*/

报纸
xulimei1986 发表于 2013-5-6 14:34:00
ziyenano 发表于 2013-5-6 14:24
data data1;
          infile E:\data1\* dsd dlm='09'X;
          informat VAR1 best32. ;           ...
这种情况我知道,关键是现在必须要取文件名做为一个变量,因为要取那个日期~~
家家有本难念的经,计较的少一点,会和睦许多!!

地板
ziyenano 发表于 2013-5-6 14:42:07
xulimei1986 发表于 2013-5-6 14:34
这种情况我知道,关键是现在必须要取文件名做为一个变量,因为要取那个日期~~
那把datalines以下的文件名,放入一个临时的txt中,用infile去读取

7
xulimei1986 发表于 2013-5-6 15:00:05
ziyenano 发表于 2013-5-6 14:42
那把datalines以下的文件名,放入一个临时的txt中,用infile去读取
这个还请大神赐教,上面的程序如果不取文件名做为变量的话,可以将data1文件夹下的所有文件一次性输出到一个文件下;现在的需求是在读取:E:\data1\20121219_data1文件时,在此文件中加入变量,目前的程序可以加入变量file_locaton=E:\data1\20121219_data1,日期我可以在这个变量中取到。
主要是我文件夹比较多,且每个文件夹下都有100多个文件~~
家家有本难念的经,计较的少一点,会和睦许多!!

8
ziyenano 发表于 2013-5-6 15:39:33
xulimei1986 发表于 2013-5-6 15:00
这个还请大神赐教,上面的程序如果不取文件名做为变量的话,可以将data1文件夹下的所有文件一次性输出到一 ...
假设在E:\目录下下有data1~data100个文件夹,每个文件夹下面有多个文件,

在dos下面  运行dir E:\  /s/b > E:\list.txt
上述命令会把E:\下面所有的文件夹以及子文件夹都列出来,所以最好能把data1~data100放在一个文件夹中(DOS学艺不精,只能这样应付一下)。

对E:\list.txt稍作处理,导入即可。

当然也可以通过filename pipe 来存储,无需生成临时的文件。

9
xulimei1986 发表于 2013-5-6 15:45:09
ziyenano 发表于 2013-5-6 15:39
假设在E:\目录下下有data1~data100个文件夹,每个文件夹下面有多个文件,

在dos下面  运行dir E:\  /s ...
同一个文件夹下的文件格式是一致的,不同文件夹下的不一致,不能放在一个文件夹下的,问题有点急我还是采用最笨的方法实现了(罗列出了各个文件名)~~我只在SAS中运行哦,谢谢你的热心解答,问题尚未解决继续求解中~~
家家有本难念的经,计较的少一点,会和睦许多!!

10
ziyenano 发表于 2013-5-6 15:54:02
xulimei1986 发表于 2013-5-6 15:45
同一个文件夹下的文件格式是一致的,不同文件夹下的不一致,不能放在一个文件夹下的,问题有点急我还是采 ...
filename  temp1 pipe  "dir E:\  /s/b";
这样即可;
不过不同文件夹中文件格式不一样,那fromat informat input等等语句也要重新写?

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-25 16:37