楼主: clearsun16
6789 18

[问答] 如何一次性对多个数据集进行相同操作 [推广有奖]

11
clearsun16 发表于 2011-3-4 11:58:36
10# ntsean 是这样规则的,但并不连续,中间有缺失,我用macro先导入再处理,结果对应缺失的表格产生了大量空白表,我在想怎样在处理时怎样不产生空白表呢

12
ntsean 发表于 2011-3-4 12:11:24
你可以用头几个observation看是不是missing,如果是missing,说明是空白表,那就不要输出

11# clearsun16

13
clearsun16 发表于 2011-3-4 17:00:42
12# ntsean 这是我写的程序
dm 'log;clear;';
%macro procdata;
%DO I=1 %TO 10;

DATA _NULL_;

X=PUT(&I,Z6.);

CALL SYMPUT("X",X);

RUN;

%PUT &X;
PROC IMPORT OUT= WORK.SZ&X
            DATAFILE= "E:\data\&X..SZ.CSV"
            DBMS=CSV REPLACE;
     GETNAMES=YES;
     DATAROW=2;
RUN;
/*%let setid=%sysfunc(open(work.sz&X));
if  (&setid ^=0) then */
data chstkdt.sz&X(rename=(var1=stkcd var2=stknm var3=tdate var7=clsp));
set work.sz&X (keep= var1 var2 var3 var7);
cret=log(var7/lag(var7));
ret=dif(var7)/lag(var7);
run;
%END;
%mend procdata;
%procdata;

其中注释起来语句是我想判断set是否存在,如果存在就进行数据处理,如果不存在do nothing. 但是加上后就有错误了,我也不知道怎么改。
谢谢你热心的回复
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

14
clearsun16 发表于 2011-3-4 17:09:04
4# 论坛数据分析 你好!我在12楼贴了程序,你有时间能帮我看一下吗?急~

15
ntsean 发表于 2011-3-4 20:30:26
你用fileexist 函数判断是不是文件存在。 我给你加了2行,把注释部分去掉了,你试试看

dm 'log;clear;';
%macro procdata;
%DO I=1 %TO 10;

DATA _NULL_;

X=PUT(&I,Z6.);

CALL SYMPUT("X",X);

RUN;

%PUT &X;

%if %sysfunc(fileexist("E:\data\&X..SZ.CSV")) %then %do;

PROC IMPORT OUT= WORK.SZ&X
             DATAFILE= "E:\data\&X..SZ.CSV"
             DBMS=CSV REPLACE;
      GETNAMES=YES;
      DATAROW=2;
RUN;

%end;
%END;
%mend procdata;
%procdata;

13# clearsun16
已有 1 人评分学术水平 热心指数 收起 理由
clearsun16 + 1 + 1 鼓励积极发帖讨论

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

16
clearsun16 发表于 2011-3-4 21:15:52
15# ntsean 我刚试过可以了 谢谢!你真是高手啊

17
邢不行 在职认证  发表于 2011-3-5 21:30:20
不管去哪里 只要在路上

18
soporaeternus 发表于 2011-3-7 09:09:25
http://www.pinggu.org/bbs/viewth ... p;extra=&page=1
以前类似的问题,感觉差不多
风险就是chouxiangdaishu后面说的,中间数据的保存不是很好
楼主权衡一下吧
Let them be hard, but never unjust

19
honghejing 发表于 2011-3-8 11:41:15
循环加macro

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-3 01:14