楼主: rabbit_lindsay
2929 10

[原创博文] 急~~数据处理 macro 请帮忙看看~~~ [推广有奖]

  • 0关注
  • 0粉丝

高中生

2%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
130 点
帖子
15
精华
0
在线时间
16 小时
注册时间
2010-8-11
最后登录
2012-1-18

楼主
rabbit_lindsay 发表于 2010-8-11 17:14:07 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
我刚接触SAS不太会~ 现在马上做一个数据处理 很着急~~~~~
要处理一堆数据,txt文档,数据格式如下:
09:15:00.500     09:15:00    3046.00 2    3046.20 1    3046.00 136
09:15:01.000     09:15:01    3046.40 5    3047.20 16  3046.40 174
09:15:01.500     09:15:01    3046.40 3    3047.20 14  3046.40 183
09:15:02.500     09:15:02    3047.80 2    3048.00 44  3048.00 225
09:15:03.000     09:15:03    3047.80 1    3048.00 18  3048.00 265
。。。。。。
(大概3万条左右)空格键间隔

请教高手:
(1)怎么把数据读入SAS里面 (第1、2列是时间,我知道SAS无法处理毫秒,所以想用字符串读入;我写的是input time1 $ 12. time2 $ 8.  p1 23-29 v1 25-26......但读入出的数据总是会莫名其妙的少掉一些;如果不在p1,v1后面加列限制,它读出的全为空;我就不知道怎么办了)

(2)并且做如下处理:第一列是时间,本来应该是每500毫秒产生一组数据,但是现在有缺失,比如09:15:01。500与09:15:02.500之间就却少了09:15:02.000这一组。因此每当遇到的缺失的时间要补出,并使补出行的其他数据与上一个时间的数据相同。(我的想法是单独建立一个完整时间的数据集合,然后让本来的这个集合与之连接,就把时间相同的接上了;然后剩下的空行再填上与上一行相同的数据; 但这部分代码我不会写)

(3)在已补充完成的完整时间序列中,提取出每3秒的数据,比如09:15:00,09:15:18... 放在新的数据集合中

(4)这样的txt文件有100多个,全部需要作上述处理,不可能一个一个的做,需要使用macro来导入txt作数据处理  但是我完全不会macro

请大家帮帮我 把详细的、完整的code写给我  十分感谢了~~~
二维码

扫码加我 拉你入群

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

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

关键词:Macro 数据处理 CRO acr Mac 左右 数据分析专题 数据处理 数据分析软件 数据分析报告 面板数据分析 excel数据分析 数据分析方法 项目数据分析

回帖推荐

hopewell 发表于7楼  查看完整内容

本帖被以下文库推荐

沙发
mtlian09 发表于 2010-8-11 17:23:23
看都看不懂 爱莫能助啊 帮你顶一下吧

藤椅
rabbit_lindsay 发表于 2010-8-11 17:30:06
唉。难道我描述不清么。。。 我觉得我基本上表达清了。。。
苍天啊。。谁帮帮我 再做不出来明天老大要骂人了。。。

板凳
soporaeternus 发表于 2010-8-11 17:38:52
  1. input time1 :time12.3 time2 :time8.  p1 v1 p2 v2 p3 v3;
复制代码
可能可以解决你的第一个问题
Let them be hard, but never unjust

报纸
xiaoxiahu0571 发表于 2010-8-11 19:35:28
data test1;
do h=1 to 24;
   do m=1 to 60;
           do s=1 to 120;
         output;
        end;
        end;
end;
run;
%macro aa(var);
if &var.<10 then &var.1="0"||left(put(&var.,$2.));
else &var.1=left(put(&var.,$2.));
%mend ();
data test2;
set test1;
%aa(h);
%aa(m);
if s=1 then  s1=0;
s1=int(s/2);
%aa(s1);
if mod(_n_,2)=0  then a3=500;
else a3=0;
var=trim(h1)||":"||trim(m1)||":"||trim(s11)||"."||left(a3);
time=trim(h1)||":"||trim(m1)||":"||trim(s11);
run;


data test3;
set test2;
if mod(s1,3)=0 then output;
run;


可以类似这个思路写,至于最后一个,
%macro ab();
data test4;
%do i=1 %to 100;
infile "d:\test&i"
%end;
;
run;
%mend;
%ab();


仅供参考啊

地板
sushe1527 发表于 2010-8-11 19:35:35
soporaeternus 发表于 2010-8-11 17:38
  1. input time1 :time12.3 time2 :time8.  p1 v1 p2 v2 p3 v3;
复制代码
可能可以解决你的第一个问题
救人救到底,送佛送到西啊

7
hopewell 发表于 2010-8-11 22:39:16
  1. %macro import(path);
  2. options mprint nosymbolgen nomlogic mcompilenote=all;
  3. libname mylib "&path";
  4. %let rc=%sysfunc(filename(filrf,&path));
  5. %let did=%sysfunc(dopen(&filrf));
  6. %do i=1 %to %sysfunc(dnum(&did));
  7.   %let memname=%sysfunc(dread(&did,&i));
  8.   %if %upcase(%scan(&memname,-1,'.'))=TXT %then
  9.    %do;
  10.     %let dsname=%upcase(%scan(&memname,1,'.'));
  11.     data mylib.&dsname;
  12.      infile "&path&memname";
  13.      input time1 :time12. time2 :time8. p1 v1 p2 v2 p3 v3;
  14.      format time1 time12.3 time2 time8.;
  15.     run;
  16.     data mylib.&dsname(drop=start end);
  17.      retain start;
  18.      set mylib.&dsname end=last;
  19.      point=_n_-1;
  20.      if _n_=1 then start=floor(time1);
  21.      else do;
  22.        end=time1;
  23.        do while(start lt end);
  24.         set mylib.&dsname point=point;
  25.         time1=start;
  26.         output;
  27.         start+.5;
  28.        end;
  29.        start=end;
  30.       end;
  31.      if last then do;
  32.        point+1;
  33.        set mylib.&dsname point=point;
  34.        output;
  35.       end;
  36.     run;
  37.     data mylib.&dsname._part;
  38.      set mylib.&dsname;
  39.      if mod(time1,'0:00:03't)=0 then output;
  40.     run;
  41.    %end;
  42. %end;
  43. %let rc=%sysfunc(dclose(&did));
  44. %mend;
  45. %import(D:\)
复制代码
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
soporaeternus + 1 + 1 + 1 及时出现!

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

8
soporaeternus 发表于 2010-8-11 22:47:13
我还没弄明白怎么回事,一个大大就出手了......
1527,很久没见你了嘛......
Let them be hard, but never unjust

9
rabbit_lindsay 发表于 2010-8-11 23:59:38
7# hopewell
谢谢你给的code~~
不过我弄错了一个地方 我才发现不是空格 而是TAB隔开的 是不是需要修改一下?
不然照着上述程序读进去总是“无效数据错误?”

10
hopewell 发表于 2010-8-12 07:57:49
  1. infile "&path&memname" dlm='09'x;
复制代码

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

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