全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1015 4
2013-10-23
数据结构如下,均为日期型变量:

xdate

ydate

date_1

date_2

date_3

date_4

date_5

date_6

2013/1/1

2013/9/30

2012/3/5

2013/10/30

2013/3/5

2013/3/9

2013/4/8

2013/8/9



程序如下:

data test2;
set test;
%let i=1;
n=0;
j=1;
do while(j<=6);
put "i is &i.";
if  xdate<=date_&i.<=ydate then n=n+1;
else n=n+0;

%let i=%eval(&i.+1);
put n;
put "i is &i.";
put j;
j=j+1;

end;
run;

期望的n值为4,但是结果为0,。

从日志发现宏变量i的值仅有1和2,求指导,该如何做,多谢。。

日志如下:



322  data test2;
323  set test;
324
325  %let i=1;
326  n=0;
327
328  j=1;
329
330  do while(j<=6);
331
332  put "i is &i.";
333
334  if  xdate<=date_&i.<=ydate then n=n+1;
335  else n=n+0;
336
337
338  %let i=%eval(&i.+1);
339
340  put n;
341
342  put "i is &i.";
343  put j;
344
345  j=j+1;
346
347
348  end;
349
350  run;
i is 1
0
i is 2
1
i is 1
0
i is 2
2
i is 1
0
i is 2
3
i is 1
0
i is 2
4
i is 1
0
i is 2
5
i is 1
0
i is 2
6
NOTE: 有 1 个从数据集 WORK.TEST 读取的观测。
NOTE: 数据集 WORK.TEST2 有 1 个观测和 10 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.01 秒
      CPU 时间          0.01 秒








二维码

扫码加我 拉你入群

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

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

全部回复
2013-10-23 20:10:37
DATA A;
INPUT (xdate ydate date_1-date_6) ($);
ARRAY DATE(*) date_1-date_6;
DO I=1 TO DIM(DATE);
IF INPUT(XDATE,YYMMDD8.)<= INPUT(DATE(I),YYMMDD8.)<= INPUT(YDATE,YYMMDD8.) THEN N+1;
END;
DROP I;
CARDS;
2013/1/1 2013/9/30 2012/3/5 2013/10/30 2013/3/5 2013/3/9 2013/4/8 2013/8/9
;
PROC PRINT;
RUN;
二维码

扫码加我 拉你入群

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

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

2013-10-23 20:13:49
A072560 发表于 2013-10-23 20:10
DATA A;
INPUT (xdate ydate date_1-date_6) ($);
ARRAY DATE(*) date_1-date_6;
谢谢

可否不用数组来实现?
因为真实数据中变量较多date_1。。。。。date_200

另外想了解下为何宏变量i的值为何没有继续增加
二维码

扫码加我 拉你入群

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

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

2013-10-23 20:32:48

DATA A;
INPUT (xdate ydate date_1-date_6) (:$10.);
CARDS;
2013/1/1 2013/9/30 2012/3/5 2013/10/30 2013/3/5 2013/3/9 2013/4/8 2013/8/9
;

%MACRO B;
DATA A;
SET A;
%DO I=1 %TO 6;
IF INPUT(XDATE,YYMMDD10.)<= INPUT(date_&I.,YYMMDD10.)<= INPUT(YDATE,YYMMDD10.) THEN N+1;
%END;
RUN;
PROC PRINT;
RUN;
%MEND B;
%B;

刚刚输入格式好像长度没设置,在点问题。
这种程序没有必要写宏的,数组已经足够自动化了,

ARRAY DATE(*) date_:;
二维码

扫码加我 拉你入群

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

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

2013-10-23 20:58:52
A072560 发表于 2013-10-23 20:32
DATA A;
INPUT (xdate ydate date_1-date_6) (:$10.);
CARDS;
多谢

另外想了解下为何宏变量i的值为何没有继续增加
这个没搞明白,还真心纠结啊,清指点下
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群