楼主: FlyUFalcon
2739 8

如何在SAS里用marco 导入数据 [推广有奖]

  • 6关注
  • 43粉丝

已卖:3份资源

教授

18%

还不是VIP/贵宾

-

威望
0
论坛币
2652 个
通用积分
18.0956
学术水平
54 点
热心指数
74 点
信用等级
53 点
经验
34243 点
帖子
1042
精华
0
在线时间
1267 小时
注册时间
2011-8-16
最后登录
2025-12-31

楼主
FlyUFalcon 在职认证  发表于 2015-9-23 17:15:38 |AI写论文
50论坛币
大家好,我现在有300组csv数据,分别是:shanghai001-shanghai100, london001-london100,newyork001-newyork100;

我现在的导入code 如下:
  1. data shanghai001;                                   
  2. infile  'H:\shanghai001.csv
  3. '   delimiter   =   ',' DSD lrecl=32767 firstobs=2  ;                           

  4. informat    Date_L_ DATE11. ;                              
  5. informat    Time_L_ time18.3    ;
  6. informat    Type    $10.    ;

  7. format  Date_L_ DATE11. ;                              
  8. format  Time_L_ time18.3    ;
  9. format  Type    $10.    ;                                                           

  10. input                                                                              
  11. Date_L_                                         
  12. Time_L_     
  13. Type    [        DISCUZ_CODE_1        ]nbsp;                                                                                          
  14. ;                                          
  15. run;
复制代码
这个code 是管用的,但是我现在不想反复复制这个code 300次,我只是想知道如何用 macro 讲这300 组数据导入成相对应的300 组(我不想要一个大表,还只想要相对应的300组数据): sh001-sh100,ln001-ln100 和 ny001-ny100

谢谢大家。

关键词:marco 导入数据 Marc ARC Mar 如何

沙发
mutangchun_yu 发表于 2015-9-23 20:52:16
宏内做个循环就可以达到目的,

%macro input_data(innm,outnm);
%do i=1 %to 100;

data _null_;
if &i<10 then call symput("k","00"||"&i.");
else if &i>=10 and &i<100 then call symput("k","0"||"&i.");
else  call symput("k","&i.");
run;


data &outnm.&k.;                                   
infile  "H:\&innm.&k..csv"
delimiter   =   ',' DSD lrecl=32767 firstobs=2  ;                           
informat    Date_L_ DATE11. ;                              
informat    Time_L_ time18.3    ;
informat    Type    $10.    ;
format  Date_L_ DATE11. ;                              
format  Time_L_ time18.3    ;
format  Type    $10.    ;                                                           
input                                                                              
Date_L_                                         
Time_L_     
Type    $                                                                                          

;                                          
run;
%end;
%mend;
%input_data(shanghai,sh);%input_data(london,ld);%input_data(newyork,ny);

藤椅
FlyUFalcon 在职认证  发表于 2015-9-23 21:37:36
mutangchun_yu 发表于 2015-9-23 20:52
宏内做个循环就可以达到目的,

%macro input_data(innm,outnm);
谢谢你的回答,
还有一个小问题,比如说我的 shanghai数据只有99个,而london 和 newyork的数据都是100个。这里的话code也是不是也不用改,因为会自动读取到99。 是这样吗?

板凳
FlyUFalcon 在职认证  发表于 2015-9-24 21:10:06
mutangchun_yu 发表于 2015-9-23 20:52
宏内做个循环就可以达到目的,

%macro input_data(innm,outnm);
好像有错误唉。。。。

提示:physical file does not exist,


你确定 文件名没有错误吗?

报纸
FlyUFalcon 在职认证  发表于 2015-9-24 21:48:25
感觉data _null_; 下面是不是要加set 什么的???

地板
FlyUFalcon 在职认证  发表于 2015-9-25 00:14:03
mutangchun_yu 发表于 2015-9-23 20:52
宏内做个循环就可以达到目的,

%macro input_data(innm,outnm);
我尝试了 宏 没有错, 应该是里面的内循环有点问题。
我不太理解 i 所对应的 倒入文件的名字

7
vstalent 发表于 2015-9-25 05:12:45
目测宏是对的,你看看你的文件是不是都在H的根目录下

8
FlyUFalcon 在职认证  发表于 2015-9-25 05:29:53
vstalent 发表于 2015-9-25 05:12
目测宏是对的,你看看你的文件是不是都在H的根目录下
谢谢, 宏没有错, 地址肯定也没有错。 因为我尝试过了。

应该是%do 那部分的问题

9
vstalent 发表于 2015-9-25 10:20:41
看看你文件名是不是001, 010,099之类的

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

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