全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3424 8
2008-03-17

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

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

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

              谢谢!!!!!

二维码

扫码加我 拉你入群

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

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

全部回复
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;


二维码

扫码加我 拉你入群

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

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

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


二维码

扫码加我 拉你入群

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

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

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


二维码

扫码加我 拉你入群

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

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

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


二维码

扫码加我 拉你入群

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

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

2008-3-18 08:11:00
去掉第一行:
DATA PATIENT_ALL
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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