SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 773|回复: 8
打印 上一主题 下一主题

关于如何快速筛选字段

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

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

关于如何快速筛选字段

[color=#4000BF:3l7lhfg9][size=150:3l7lhfg9]请教一个问题,我现在有一个表,第一列是ID,字符型变量,剩余的所有其他列也都是字符型变量,

我现在需要将除了第一列的都变成数字型,请问如何用快速的写出语句,不要一个一个写,谢谢!

[/size:3l7lhfg9][/color:3l7lhfg9]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2011-1-30 14:21:03 | 只看该作者

Re: 关于如何快速筛选字段

[code:8j7ejj37]data raw;
    input id $ var1 $ var2 $;
datalines;
a1 11 12
a2 21 22
;
options nomprint nosymbolgen nomlogic mcompilenote=all;
%macro Benhope(dsname=, firstvar=2, prefix=n_);
    %local err libname nvarname;
    %let err=0;
    %let dsname=%upcase(&dsname);
    %let prefix=%upcase(&prefix);
    %if %sysfunc(exist(&dsname)) ne 1 %then %do;
        %let err=1;
        %put WARNING: *** Dataset(&dsname) Not Exist! ***;
    %end;
    %if &err eq 0 %then %do;
        %if %index(&dsname, .) %then %do;
            %let libname=%scan(&dsname, 1, .);
            %let dsname=%scan(&dsname, 2, .);
        %end;
        %else %let libname=WORK;
        %if %length(&dsname) gt 30 %then %let out_dsname=N_%substr(&dsname, 1, 30);
        %else %let out_dsname=N_&dsname;
        proc sql;
            create table _temp as
                select name as varname, type, varnum
                    from sashelp.vcolumn
                    where libname="&libname" and memname="&dsname"
                          and memtype='DATA' and type='char'
                    order by varnum;
        quit;
        %let dsid=%sysfunc(open(work._temp));
        %let num=%sysfunc(attrn(&dsid, nlobs));
        %if &num gt 0 %then %do;
            %syscall set(dsid);
            data &out_dsname;
            set &dsname;
            %do i=&firstvar %to #
                %let rc=%sysfunc(fetchobs(&dsid, &i));
                %if %length(&varname) gt 30 %then %let nvarname=N_%substr(&varname, 1, 30);
                %else %let nvarname=N_&varname;
                %put NOTE: *** Character Variable (%trim(&varname)) Converted Numeric Variable! ***;
                &nvarname=input(&varname, best.);
                drop &varname;
                rename &nvarname=&varname;
            %end;
            run;
        %end;
        %if &dsid gt 0 %then %let rc=%sysfunc(close(&dsid));
        proc datasets library=work nolist;
            delete _temp;
        quit;
    %end;
%mend;
%benhope(dsname=raw)[/code:8j7ejj37]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2011-1-30 14:44:13 | 只看该作者

Re: 关于如何快速筛选字段

[code:xkljmecd]data raw;
    input id $ var1 $ var2 $;
datalines;
a1 11 12
a2 21 22
;

proc sql;
    select  compbl(' input(' ||name||',best8.) as '||name) into :inputstr separated by ','
    from sashelp.vcolumn
    where libname='WORK' and memname='RAW' and name~='ID';
    create table final as
    select id ,&inputstr
    from raw
    ;[/code:xkljmecd]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2011-1-30 15:59:27 | 只看该作者

Re: 关于如何快速筛选字段

[size=150:12wnwuzf][color=#4000BF:12wnwuzf]两位大侠,你们的代码好深奥啊,我在想可否根据变量名建立循环,但是我的变量名是没有规律的

[/color:12wnwuzf][/size:12wnwuzf]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
5#
 楼主| 发表于 2011-1-30 16:08:35 | 只看该作者

Re: 关于如何快速筛选字段

你哪只眼睛看出我们的代码要求变量名有规律了?左眼看出挖左眼,右眼看出挖右眼。。。。。
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2011-1-30 17:16:42 | 只看该作者

Re: 关于如何快速筛选字段

to ahuige
[color=#4000BF:19e81ndr][size=150:19e81ndr]误会我的意思了。。。我请教一下我上面构想的那种思路可以实现吗?

处理这样一个不大的问题,用到两位这样的代码,缺失有点杀鸡用了牛刀了

[/size:19e81ndr][/color:19e81ndr]
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

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

Re: 关于如何快速筛选字段

to ahuige
<!-- s:D --><img src="{SMILIES_PATH}/icon_biggrin.gif" alt=":D" title="Very Happy" /><!-- s:D -->  great
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
8#
 楼主| 发表于 2011-1-30 19:37:36 | 只看该作者

Re: 关于如何快速筛选字段

to muir
SAS的特点就是这样,不大的问题也要用复杂的代码来完成,但是有些复杂的问题,它却有现成的代码,哈哈.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
9#
 楼主| 发表于 2011-1-31 09:52:11 | 只看该作者

Re: 关于如何快速筛选字段

奉送简单代码。恭喜新年发财。。。
[code:ghvtrd0o]data new;
        set old;
        newid=_n_;
        drop oldid;
run;[/code:ghvtrd0o]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-13 09:13 , Processed in 0.129968 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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