楼主: dy21cn
1030 4

[问答] 求大侠指点程序 [推广有奖]

  • 1关注
  • 0粉丝

本科生

34%

还不是VIP/贵宾

-

威望
0
论坛币
25 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2005 点
帖子
62
精华
0
在线时间
69 小时
注册时间
2010-10-5
最后登录
2021-11-16

楼主
dy21cn 发表于 2013-10-23 19:57:56 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
数据结构如下,均为日期型变量:

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 秒








二维码

扫码加我 拉你入群

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

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

关键词:求大侠指点 while Dated date test 程序

沙发
A072560 发表于 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;

藤椅
dy21cn 发表于 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的值为何没有继续增加

板凳
A072560 发表于 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_:;

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

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

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

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