SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 1822|回复: 11
打印 上一主题 下一主题

数据整理

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2011-7-17 11:37:30 | 只看该作者

数据整理

data have;
input x$ y $;
cards;
_label1 aaa
name char
_label2 (aaa)
sex char
_label3 (bbb)
age num
;
run;

想得到的数据集/*比如_label2后面的取值 有括号 那么name 后面就加上(aaa) _lable1后面没有括号 就删除 age后面没有_label 用空表示*/
name char (aaa)
sex  char (bbb)
age  num   空

谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-7-17 14:34:34 | 只看该作者

Re: 数据整理

[code:39py73xd]data result(keep=x y z);
  array w(6) $ _temporary_;
  do i=1 to 6;
      set have ;
          w(i)=y;
  end;
do i=1 to 6;
    set have;
    if i < 6 and prxmatch("/\(\w+\)/",w(i+1)) then z=w(i+1);
        else  z='';
output;
end;
run;[/code:39py73xd]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-7-17 15:59:24 | 只看该作者

Re: 数据整理

如果是这样呢?
data have;
input x$ y $;
cards;
_label1 aaa
name char
_label2 (aaa)
sex char
_label3 (bbb)
age num
ddd char
_label3 (bbb)
;
run;
程序最好能通用,谢谢!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-7-17 16:31:40 | 只看该作者

Re: 数据整理

[code:3iol4vs7]data result(keep=x y z)  ;
  call symputx('obs',n)        ;
  array w(&obs.) $ _temporary_;
  do i=1 to &obs.;
      set have nobs=n;
          w(i)=y;
  end;
do i=1 to &obs.;
    set have;
    if i < &obs. and prxmatch("/\(\w+\)/",w(i+1)) then z=w(i+1);
        else  z='';
        output;  /*if not prxmatch("/^_/",strip(x)) then output ;*/  /*not print like '_label_'*/
end;
run;[/code:3iol4vs7]
请问不通用是因为观测数的不确定么?还是其它的问题?上边重新贴的这段代码就只是对观测数简单的进行了下修改!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-7-17 17:45:11 | 只看该作者

Re: 数据整理

1827  data result(keep=x y z)  ;
1828    call symputx('obs',n)   ;
1829    array w(&obs.) $ _temporary_;
                -
                22
                200
WARNING: 没有解析符号引用 OBS。
1830    do i=1 to &obs.;
                  -
                  386
                  200
WARNING: 没有解析符号引用 OBS。
ERROR 22-322: 语法错误,期望下列之一: 名称, 整数常数, *.

ERROR 200-322: 该符号不可识别,将被忽略。

ERROR 386-185: 期望算术表达式。

1831        set have nobs=n;
1832       w(i)=y;
ERROR: 不允许混合隐式和显式数组下标。
ERROR: 不允许混合隐式和显式数组下标。
1833    end;
1834  do i=1 to &obs.;
                -
                386
                200
WARNING: 没有解析符号引用 OBS。
ERROR 386-185: 期望算术表达式。

ERROR 200-322: 该符号不可识别,将被忽略。

1835      set have;
1836      if i < &obs. and prxmatch("/\(\w+\)/",w(i+1)) then z=w(i+1);
                 -
                 390
                 200
WARNING: 没有解析符号引用 OBS。
ERROR: 不允许混合隐式和显式数组下标。
ERROR: 不允许混合隐式和显式数组下标。
ERROR: 不允许混合隐式和显式数组下标。
ERROR: 不允许混合隐式和显式数组下标。
ERROR 390-185: 期望关系或算术运算符。

ERROR 200-322: 该符号不可识别,将被忽略。

1837     else  z='';
1838     output;  /*if not prxmatch("/^_/",strip(x)) then output ;*/  /*not print like
1838! '_label_'*/
1839  end;
1840  run;

NOTE: 由于出错,SAS 系统停止处理该步。
WARNING: 数据集 WORK.RESULT 可能不完整。该步停止时,共有 0 个观测和 3 个变量。
WARNING: 数据集 WORK.RESULT 由于该步已停止,而没有被替换。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.01 秒
      CPU 时间          0.01 秒
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-7-17 18:04:18 | 只看该作者

Re: 数据整理

哦,主要是由于贴上代码后,加了部分注释上去,所以主要是因为注释哪儿格式不对,你把原来后边添加的注释/*not print like '_label_'*/去掉,再试试!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
7#
 楼主| 发表于 2011-7-17 18:19:50 | 只看该作者

Re: 数据整理

后来运行好多次,都没出问题呀!!请问你是用的那个版本的哎?
[quote:2uypy1vf]1455  data have;
1456  input x$ y $;
1457  cards;

NOTE: 数据集 WORK.HAVE 有 8 个观测和 2 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.01 秒
      CPU 时间          0.01 秒


1466  ;
1467  run;
1468  data result(keep=x y z)  ;
1469    call symputx('obs',n)   ;
1470    array w(&obs.) $ _temporary_;
1471    do i=1 to &obs.;
1472        set have nobs=n;
1473       w(i)=y;
1474    end;
1475   do i=1 to &obs.;
1476      set have;
1477      if i < &obs. and prxmatch("/\(\w+\)/",w(i+1)) then z=w(i+1);
1478     else  z='';
1479     output;  /*if not prxmatch("/^_/",strip(x)) then output ;*/  /*not print like '_label_'*/
1480  end;
1481  run;

NOTE: 有 8 个从数据集 WORK.HAVE 读取的观测。
NOTE: 有 8 个从数据集 WORK.HAVE 读取的观测。
NOTE: 数据集 WORK.RESULT 有 8 个观测和 3 个变量。
NOTE: “DATA 语句”所用时间(总处理时间):
      实际时间          0.03 秒
      CPU 时间          0.03 秒


[/quote:2uypy1vf]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2011-7-17 19:59:33 | 只看该作者

Re: 数据整理

SAS9.2 还是报错!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2011-7-17 20:02:28 | 只看该作者

Re: 数据整理

data have;
input x$ y $;
cards;
_label1 aaa
name char
_label2 (aaa)
sex char
_label3 (bbb)
age num
ddd char
_label3 (bbb)
;
run;

data result(keep=x y z)  ;
  call symputx('obs',n)   ;
  array w(&obs.) $ _temporary_;
  do i=1 to &obs.;
      set have nobs=n;
     w(i)=y;
  end;
do i=1 to &obs.;
    set have;
    if i < &obs. and prxmatch("/\(\w+\)/",w(i+1)) then z=w(i+1);
   else  z='';
   output;  
run;
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
10#
 楼主| 发表于 2011-7-17 20:20:03 | 只看该作者

Re: 数据整理

[quote="stata":1t177wpg]data have;
input x$ y $;
cards;
_label1 aaa
name char
_label2 (aaa)
sex char
_label3 (bbb)
age num
ddd char
_label3 (bbb)
;
run;

data result(keep=x y z)  ;
  call symputx('obs',n)   ;
  array w(&obs.) $ _temporary_;
  do i=1 to &obs.;
      set have nobs=n;
     w(i)=y;
  end;
do i=1 to &obs.;
    set have;
    if i < &obs. and prxmatch("/\(\w+\)/",w(i+1)) then z=w(i+1);
   else  z='';
   output;  
[color=#FF0000:1t177wpg]end;[/color:1t177wpg]
run;[/quote:1t177wpg]
run语句前边少了一个end;运行没问题的!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-6-10 05:30 , Processed in 0.070731 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表