楼主: ljpest
2453 11

[问答] 求助:如何将头n行数据设为空值。 [推广有奖]

  • 0关注
  • 0粉丝

高中生

27%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
153 点
帖子
18
精华
0
在线时间
17 小时
注册时间
2014-10-17
最后登录
2017-5-17

楼主
ljpest 发表于 2014-10-17 23:30:34 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
各位大师:
有这样一个数据集:
data test;
input stockcode $ time price;
cards;
000001        2005 15
000001        2005 16
000001        2006 17
000002        2005 18
000002        2006 19
000002        2007 20
;
希望将第一行(前n行)的Price列置为空置。
也就是希望得到下面的数据。
000001        2005 .
000001        2005 .
000001        2006 17
000002        2005 .
000002        2006 19
000002        2007 20
如果用first的话只能设置第一行。像000001这种情况希望头两行都为空,谢谢。

二维码

扫码加我 拉你入群

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

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

关键词:Price First Input Stock cards 如何

回帖推荐

teqel 发表于10楼  查看完整内容

看看这个: data test1(drop=temp); set test; by stockcode; retain temp; if first.stockcode then do; temp=time; price=.; end; else if time=temp then price=.; run;

沙发
ljpest 发表于 2014-10-18 12:39:21
顶顶呵呵

藤椅
teqel 发表于 2014-10-18 20:58:27 来自手机
得把要求说清楚

板凳
ljpest 发表于 2014-10-18 22:14:53
谢谢楼上顶贴,就是就是希望把每个stockcode,time的第一行的Price清空。这个可以用first很容易实现。但是如果对于同一个stockcode来说它头两行stockcode,time相同的话,怎么去清空?谢谢。不知道我说明白没有。

报纸
xiuzhenning 发表于 2014-10-18 22:41:38
不知道以下的程序是不是楼主想要的。我也新手,共同来学习
proc sort data = test;
        by stockcode time price;
run;
data test1;
        set test;
        flg = lag(time);
        by stockcode;
        if first.stockcode then call missing(price);
        if time = flg then call missing(price);

        drop flg;

run;

地板
ljpest 发表于 2014-10-18 23:08:57
谢谢楼上兄弟,但不能完全实现我的要求,就是数据如下所示时,不想请空第三行的数据。您的程序会把第三行也清空了。不过非常谢谢您的回帖。我的意思可能没解释清楚,就是我想清空头n行的数据。
000001        2004 15
000001        2005 16
000001        2005 17
000002        2005 18

7
xiuzhenning 发表于 2014-10-18 23:31:44
OBS    stockcode    time    price

   1      000001      2005       .
   2      000001      2005       .
   3      000001      2006      17
   4      000002      2005       .
   5      000002      2006      19
   6      000002      2007      20
以上是我这里运行的结果,没有清空第三行数据。

8
ljpest 发表于 2014-10-19 00:20:38
我的意思是是下面这个数据
000001      2004      14
000001      2005      15
000001      2005      17
000002      2005      18
000002      2006      19
000002      2007      20
希望得到这样的结果
000001      2004      .
000001      2005      15
000001      2005      17
000002      2005      .
000002      2006      19
000002      2007      20
如果用您的程序的话第三行也会被清掉。

9
xiuzhenning 发表于 2014-10-19 08:47:37
ljpest 发表于 2014-10-19 00:20
我的意思是是下面这个数据
000001      2004      14
000001      2005      15
你说的是第四行吧?第四行不是000002的第一个么?这个不是你要清除的?
额……看来是我的理解出了问题,不太懂你的意思,不好意思,帮不了你。
我看你的原数据集和想要的结果是按stockcode分组后,把第一条置为缺失值,
并且同stockcode中time与第一条相同的话也置为缺失值。

10
teqel 发表于 2014-10-19 11:22:38
看看这个:

data test1(drop=temp);
set test;
by stockcode;
retain temp;
if first.stockcode then do;
        temp=time;
        price=.;
        end;
else if time=temp then price=.;
run;

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

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