楼主: dankdark
6366 6

[原创博文] 请教怎么从raw data里读数据 [推广有奖]

  • 0关注
  • 1粉丝

已卖:180份资源

硕士生

13%

还不是VIP/贵宾

-

威望
0
论坛币
183 个
通用积分
10.3516
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
1883 点
帖子
110
精华
0
在线时间
135 小时
注册时间
2005-6-23
最后登录
2024-3-30

楼主
dankdark 发表于 2010-7-15 08:03:35 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教高人怎么从raw data里读的mutliple records来创造one obversation 但record的个数是变的。先谢了。

具体的说,有raw data,每个记录有3种行,第1行是日期和时间,第2行是下面信息的标题,第3种是信息,如果没有第3种信息,时间也就不显示在output上了。output的第一列是日期和时间.

Sun Jul 4 16:01:02 MST 2010
USER,RESOURCE,STATUS,NODE,PID,S,STARTED,PRI,PSR,%CPU,%MEM,TIME,PROGRAM
Sun Jul 4 16:03:02 MST 2010
USER,RESOURCE,STATUS,NODE,PID,S,STARTED,PRI,PSR,%CPU,%MEM,TIME,PROGRAM
syoung,BASESAS,running,ap05,16107,S,16:01:17,23,0,1.7,0.2,00:00:01,/u14/apps/prod/TADW/code/extract-response.sas
Sun Jul 4 16:05:02 MST 2010
USER,RESOURCE,STATUS,NODE,PID,S,STARTED,PRI,PSR,%CPU,%MEM,TIME,PROGRAM
syoung,BASESAS,running,ap05,16107,S,16:01:17,23,0,0.8,0.2,00:00:01,/u14/apps/prod/TADW/code/extract-response.sas
Sun Jul 4 16:07:02 MST 2010
USER,RESOURCE,STATUS,NODE,PID,S,STARTED,PRI,PSR,%CPU,%MEM,TIME,PROGRAM
gsethi,BASESAS,running,ap04,13343,S,16:05:58,22,0,7.7,0.1,00:00:04,/disk/03/u03/uk/analysis_2010/door_drop/eligible_vol/cms.sas
syoung,BASESAS,running,ap05,16107,S,16:01:17,23,0,0.5,0.2,00:00:01,/u14/apps/prod/TADW/code/extract-response.sas
Sun Jul 4 16:09:02 MST 2010
USER,RESOURCE,STATUS,NODE,PID,S,STARTED,PRI,PSR,%CPU,%MEM,TIME,PROGRAM
gsethi,BASESAS,running,ap04,13343,S,16:05:59,22,0,7.7,0.1,00:00:14,/disk/03/u03/uk/analysis_2010/door_drop/eligible_vol/cms.sas
syoung,BASESAS,running,ap05,16107,S,16:01:17,23,0,0.4,0.2,00:00:01,/u14/apps/prod/TADW/code/extract-response.sas


怎么能生产下面的output
Obs      datetime               user   resource       status   node   pid     s    started   pri  psr    cpu

   1  04JUL10:16:03:02  syoung  BASESAS   running  ap05  16107  S  16:01:17  23    0     1.7
   2  04JUL10:16:05:02  syoung  BASESAS   running  ap05  16107  S  16:01:17  23    0     0.8
   3  04JUL10:16:07:02  gsethi    BASESAS   running  ap04  13343  S  16:05:58  22    0     7.7
   4  04JUL10:16:07:02  syoung  BASESAS   running  ap05  16107  S  16:01:17  23    0     0.5
   5  04JUL10:16:09:02  gsethi    BASESAS   running  ap04  13343  S  16:05:59  22    0     7.7
   6  04JUL10:16:09:02  syoung  BASESAS   running  ap05  16107  S  16:01:17  23    0     0.4

Obs    mem         time      program

   1    0.2       00:00:01    /u14/apps/prod/TADW/code/extract-response.sas
   2    0.2       00:00:01    /u14/apps/prod/TADW/code/extract-response.sas
   3    0.1       00:00:04    /disk/03/u03/uk/analysis_2010/door_drop/eligible_vol/cms.sas
   4    0.2       00:00:01    /u14/apps/prod/TADW/code/extract-response.sas
   5    0.1       00:00:14    /disk/03/u03/uk/analysis_2010/door_drop/eligible_vol/cms.sas
   6    0.2       00:00:01    /u14/apps/prod/TADW/code/extract-response.sas

我的思路是把第2行信息的标题,就不读了。然后下一行的长度是否和第一行的长度一样,如果一样,就把它做为一条新的记录,再读。
data a (drop=try);
    infile tests dlm=',';
    *retain datatime;
    input datatime $ @;
    input;
    input try @;
    if length(try)=length(datatime)then datatime=try;
        else do user=try;
        input  RESOURCE $ STATUS $ NODE $ PID $ S $ STARTED $ PRI $ PSR $ PERCENT_CPU $ PERCENT_MEM $ TIME $ PROGRAM $;
        output;
        end;
    run;
二维码

扫码加我 拉你入群

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

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

关键词:Data raw response resource Analysis running records 记录 信息

回帖推荐

pobel 发表于6楼  查看完整内容

data a ; infile tests; input; retain datatime; this=_infile_; if this=:"Sun" then datatime=this; length USER RESOURCE STATUS NODE PID S STARTED PRI PSR PERCENT_CPU PERCENT_MEM TIME $10 program $100; array temp(*) $ USER RESOURCE STATUS NODE PID S STARTED PRI PSR PERCENT_CPU PERCENT_MEM TIME PROGRAM ; if this ^=: "Sun" and this ^=:"USER" th ...

本帖被以下文库推荐

沙发
tracyyang 发表于 2010-7-15 08:08:22
这个好像用infile, 分隔符用',' 就可以。

藤椅
dankdark 发表于 2010-7-15 08:12:39
但是记录的数量是变的

板凳
dankdark 发表于 2010-7-15 08:17:10
我的程序有问题,请高手指出


用input datatime $ @ / / try @; 也不行

报纸
dankdark 发表于 2010-7-15 12:09:01
请高手指出

地板
pobel 在职认证  发表于 2010-7-15 13:36:49
data a ;
    infile tests;
    input;
    retain datatime;
    this=_infile_;
    if this=:"Sun" then datatime=this;
    length USER RESOURCE STATUS  NODE  PID  S  STARTED  PRI  PSR  PERCENT_CPU  PERCENT_MEM  TIME $10 program $100;
    array temp(*) $ USER RESOURCE STATUS  NODE  PID  S  STARTED  PRI  PSR  PERCENT_CPU  PERCENT_MEM  TIME  PROGRAM ;
    if this ^=: "Sun" and this ^=:"USER" then do;
       do i=1 to 13;
           temp(i)=scan(this,i,",");
      end;
      output;
  end;
  drop this i;
run;
已有 1 人评分学术水平 热心指数 收起 理由
crackman + 1 + 1 热心

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

和谐拯救危机

7
steven_64 发表于 2011-7-27 23:14:34
命令:infile x y z using xxx.raw
可读入ASCII文件,其中包含3个变量x,y,z。这些变量值由一个或多个空格隔开,或者是由制表符、回车符分隔,或者是由英文逗号分隔。这可以解决伍德里奇中的.raw中的数据分隔问题。

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

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