楼主: iamssj
1879 3

运行IML程序时的问题 [推广有奖]

  • 0关注
  • 3粉丝

讲师

74%

还不是VIP/贵宾

-

威望
0
论坛币
680 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
2169 点
帖子
276
精华
0
在线时间
650 小时
注册时间
2009-10-11
最后登录
2025-5-9

楼主
iamssj 在职认证  发表于 2012-12-16 17:36:19 |AI写论文
10论坛币
我想对一个数据集作如下处理:给满足条件的某些观测前后一定范围的观测作出标记。
这里我用了IML处理,主要代码如下:
proc iml;
use b;
read all var _all_ into x;
do i=1 to nrow(x);
  if x[i,3] = 1
    then
    do while(i-50<=j<=i+50);
      x[j,6] = 1;
    end;
end;
create new from x;
append from x;
quit;
但是日志却显示有错误:
ERROR: (execution) Matrix has not been set to a value.

operation : <= at line 336 column 18
operands  : _TEM1003, J

_TEM1003      1 row       1 col     (numeric)

       140

J      0 row       0 col     (type ?, size 0)


statement : DO at line 336 column 5
ERROR: Error evaluating DO WHILE expression; DO loop exited.

请问这是为什么?应该如何修改???
谢谢。

最佳答案

bbear 查看完整内容

proc iml; use b; read all var _all_ into x; do i=1 to nrow(x); if x = 1 then do; do j=-50 to 50; if ((j-50>=1) & (j+50 while(i-50
关键词:while READ Then The ROC 程序

沙发
bbear 发表于 2012-12-16 17:36:20

proc iml;
use b;
read all var _all_ into x;
do i=1 to nrow(x);
   if x[i,3] = 1  then  do;
        do j=-50 to 50;
            if ((j-50>=1) & (j+50<=nrow(x) )) then do;
                x[j,6] = 1;
            end;
        end; *do j;
     end; *if ;
end; *i;
create new from x;
append from x;
quit;

--> while(i-50<=j<=i+50); 這不是程序, J 沒有定義, 且二個條件寫在一起是不對的語法
--> 靠do j 定義J, 條件改為if , check 不要out of range [1 to row(x)].

藤椅
ziyenano 发表于 2012-12-16 18:13:39
proc iml;
use b;
read all var _all_ into x;
do i=1 to nrow(x);
  if x[i,3] = 1
    then
        j=max(1,i-50);
    do while(i-50<=j<=min(i+50,nrow(x)));
      x[j,6] = 1;
          j=j+1;
    end;
end;
create new from x;
append from x;
quit;
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
clhclhjdz + 1 + 1 + 1 非常感谢你

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

板凳
ziyenano 发表于 2012-12-16 18:31:08
不过用矩阵的指针操作更方便:
proc iml;
use b;
read all var _all_ into x;
do i=1 to nrow(x);
  if x[i,3] = 1
    then
      x[max(i-50,1):min(i+50,nrow(x)),6] = 1;
end;
create new from x;
append from x;
quit;

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

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