标题: 数据整理 [打印本页] 作者: shiyiming 时间: 2011-7-17 11:37 标题: 数据整理 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 空
谢谢!作者: shiyiming 时间: 2011-7-17 14: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]作者: shiyiming 时间: 2011-7-17 15:59 标题: Re: 数据整理 如果是这样呢?
data have;
input x$ y $;
cards;
_label1 aaa
name char
_label2 (aaa)
sex char
_label3 (bbb)
age num
ddd char
_label3 (bbb)
;
run;
程序最好能通用,谢谢!作者: shiyiming 时间: 2011-7-17 16:31 标题: 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]
请问不通用是因为观测数的不确定么?还是其它的问题?上边重新贴的这段代码就只是对观测数简单的进行了下修改!作者: shiyiming 时间: 2011-7-17 17:45 标题: 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;
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;
[/quote:2uypy1vf]作者: shiyiming 时间: 2011-7-17 19:59 标题: Re: 数据整理 SAS9.2 还是报错!作者: shiyiming 时间: 2011-7-17 20:02 标题: 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;作者: shiyiming 时间: 2011-7-17 20:20 标题: 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;运行没问题的!作者: shiyiming 时间: 2011-7-18 05:47 标题: Re: 数据整理 还是运行不起来作者: shiyiming 时间: 2011-7-18 11:54 标题: Re: 数据整理 我想这主要还是sas本身的一些缺陷造成的!data result步前面加上下边这段后,在你的机器上运行应该就不会出错了:
[quote:2y9j01hq]data _null_;
call symputx('obs',n);
set have nobs=n;
run;[/quote:2y9j01hq]
[code:2y9j01hq]data _null_;
call symputx('obs',n);
set have nobs=n;
run;
%put obs=&obs.;
data result(keep=x y z) ;
array w(&obs.) $ _temporary_;
do i=1 to &obs.;
set have;
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;
end;
run; [/code:2y9j01hq]