楼主: l6397
3382 8

[求助]怎样用程序插入一行观测 [推广有奖]

  • 0关注
  • 0粉丝

博士生

42%

还不是VIP/贵宾

-

威望
0
论坛币
120 个
通用积分
16.6418
学术水平
1 点
热心指数
6 点
信用等级
0 点
经验
3788 点
帖子
235
精华
0
在线时间
178 小时
注册时间
2007-3-28
最后登录
2023-5-13

楼主
l6397 发表于 2008-3-17 21:25:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

各位前辈:  求教一个简单的问题?

       1、怎样用程序在任何行(如第3行、最后一行)插入一行空观测。

       2、怎样在变量X、y下,给这空观测赋值(如x=2,y=3).

              谢谢!!!!!

二维码

扫码加我 拉你入群

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

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

关键词:求助 程序 观测

回帖推荐

flyfishing 发表于5楼  查看完整内容

一样的思路另一种写法: DATA PATIENT_ALL   DATA  PATIENT_HALF; ROW=3; SET PATIENT0_COPY; retain N 0; n+1;       IF _N_=row THEN do;             call execute ("PROC SQL;");             call execute ("INSERT INTO PATIEN ...

flyfishing 发表于3楼  查看完整内容

这是将数据排序后的结果; (n=3缺失,为加入新数据流出n)                                 Obs       patient     newdate     N               ...

flyfishing 发表于2楼  查看完整内容

将原数据集排序(N), 但是将要插入的空行的n 值加1; 即如果在第3行(row=3) 插入数据 泽n 值为4, 然后依次继续排列。第二步插入数据用PROC SQL , 并插入 n 值(此例  n=3), 最后一步将数据用N值排序。新数据植入到第三行。 DATA NEWDATA; ROW=3; /* SET  ROW #  WHERE  NEW DATA WILL BE INSERTED*/ SET OLDDATA; retain N 0; n+1; IF _N_=ROW THEN do; N=ROW +1; end; DROP ...

本帖被以下文库推荐

沙发
flyfishing 发表于 2008-3-18 06:55:00
将原数据集排序(N), 但是将要插入的空行的n 值加1; 即如果在第3行(row=3) 插入数据 泽n 值为4, 然后依次继续排列。第二步插入数据用PROC SQL , 并插入 n 值(此例  n=3), 最后一步将数据用N值排序。新数据植入到第三行。

DATA NEWDATA;

ROW=3; /* SET  ROW #  WHERE  NEW DATA WILL BE INSERTED*/

SET OLDDATA;

retain N 0;

n+1;

IF _N_=ROW THEN do;

N=ROW +1;

end;

DROP ROW ;

RUN;

PROC SQL;

INSERT INTO NEWDATA

SET PATIENT=999, newdate='01Jan01'd, N=3;

quit;

Proc Sort data=Patient_half;

by N;

run;


已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

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

藤椅
flyfishing 发表于 2008-3-18 06:58:00
这是将数据排序后的结果; (n=3缺失,为加入新数据流出n)

                                Obs       patient     newdate     N

 

                                  1      101       25MAY01     1

                                  2      101       01JUN01     2

                                  3      101       08JUN01     4

                                  4      102       30JUL01     5

                                  5      102       06AUG01     6

                                  6      102       13AUG01     7

                                  7      103       24JUL01     8

                                  8      103       31JUL01     9

                                  9      103       07AUG01    10

                                 10      103       14AUG01    11

                                 11      104       22AUG01    12

                                 12      104       29AUG01    13

                                 13      104       05SEP01    14


已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

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

板凳
flyfishing 发表于 2008-3-18 07:03:00
最终结果:

                            Obs    patient     newdate     N

 

                                  1      101       25MAY01     1

                                  2      101       01JUN01     2

                                  3      999       01JAN01     3

                                  4      101       08JUN01     4

                                  5      102       30JUL01     5

                                  6      102       06AUG01     6

                                  7      102       13AUG01     7

                                  8      103       24JUL01     8

                                  9      103       31JUL01     9

                                 10      103       07AUG01    10

                                 11      103       14AUG01    11

                                 12      104       22AUG01    12

                                 13      104       29AUG01    13

                                 14      104       05SEP01    14


报纸
flyfishing 发表于 2008-3-18 08:09:00
一样的思路另一种写法:

DATA PATIENT_ALL

 

DATA  PATIENT_HALF;

ROW=3;

SET PATIENT0_COPY;

retain N 0;

n+1;

      IF _N_=row THEN do;

            call execute ("PROC SQL;");

            call execute ("INSERT INTO PATIENT_HALF  SET pATIENT=999, newdate='01Jan01'd, N=3;");

            call execute ("quit;");

      end;

DROP row;

RUN;

 

Proc Sort data=PATIENT_HALF;

by N;

run


已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 10 精彩帖子

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

地板
flyfishing 发表于 2008-3-18 08:11:00
去掉第一行:
DATA PATIENT_ALL

7
wolfcrying 发表于 2008-3-18 16:45:00

楼上的方法太复杂了,在DATA 步里用两次output就可以了.

 比如在第3 步和最后一步前插入记录,并赋值,这么写就OK

data new;

 if _n_=3 or last then do;

   x=3;y=5;output;end;

 set old end=last;

 output;

 run;

搞定!

如果是在之后写,稍微复杂一点,但也不难

data new;

 set old end=last;

 output;         /*输出当前记录*/

 array char _character_; /*定义所有字符变量为一个数组*/

array num _numeric_;  /*定义所有数值变量为一个数组*/

 if _n_=3 or last then do;  /*在需要插入的记录行处执行以下操作*/

  do over char; char=''; end;    /*把所有字符变量清空*/

  do over num num=.;end; /*把所有数值变量清空*/

    x=3;y=5;  /*对需要赋值的变量进行赋值*/

  output;end;    /*再输出一次,即插入*/

 run;

[此贴子已经被作者于2008-3-18 16:54:34编辑过]

8
l6397 发表于 2008-3-18 19:35:00

谢谢!  楼上各位前辈 !

感谢 wolfcrying 前辈 !程序精练、解释详细。

感谢 flyfishing 前辈 ! 还把结果显示出来。

让您们费心了! 对于初学者特别有帮助!! 谢谢!

[此贴子已经被作者于2008-3-18 22:44:30编辑过]

9
pandasasa 发表于 2008-8-21 09:42:00

顶!!受益匪浅

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

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