楼主: 阿呆sas
2983 12

筛选变量值--程序优化问题 [推广有奖]

  • 1关注
  • 0粉丝

高中生

10%

还不是VIP/贵宾

-

威望
0
论坛币
7 个
通用积分
0
学术水平
3 点
热心指数
3 点
信用等级
3 点
经验
561 点
帖子
22
精华
0
在线时间
12 小时
注册时间
2014-6-13
最后登录
2016-10-8

楼主
阿呆sas 发表于 2014-6-27 18:33:42 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
向各位大侠请教!
在一个数据集里,有很多变量,其中有三十个变量,变量名为name_1-name_30,我想筛选这30个变量中,第一个不为-8的值,并将这个值,赋给新的变量new中,不知道有什么简便的方法嘛?我试了用array{30} 然后将这三十个做do循环,可是最后总选中的是最后一个不为0.有什么好的解决方法嘛~
二维码

扫码加我 拉你入群

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

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

关键词:程序优化 变量值 array name 各位大侠 程序

沙发
mingfeng07 学生认证  发表于 2014-6-27 19:53:55
  1. data test;
  2. set a;/*你的数据集*/
  3. array array{*} name_1-name_30;
  4. do i=1 to dim(array);
  5. if array(i) ne -8 then do;
  6. new=array(i);
  7. output;
  8. leave;
  9. end;
  10. end;
  11. drop i;
  12. run;
复制代码

藤椅
阿呆sas 发表于 2014-6-28 19:50:50
mingfeng07 发表于 2014-6-27 19:53
哇!你好棒~ 我昨天又自己试了试 发现这样也能实现:
data test;
set a;
array array{*} name1-name30;
do i=30 to 1;
if array{i} ne -8 then new=array{i};
end;
run;
你觉得okay么? 不过还是你这个好!
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
Tigflanker + 3 + 3 + 3 加leave效率高

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

板凳
mingfeng07 学生认证  发表于 2014-6-28 23:49:19
阿呆sas 发表于 2014-6-28 19:50
哇!你好棒~ 我昨天又自己试了试 发现这样也能实现:
data test;
set a;
嗯,你这个也可以,你的是倒序条件赋值,每一个循环都将所有变量都遍历了一遍,如果变量太多的话,程序运行会很慢。

报纸
阿呆sas 发表于 2014-6-30 12:59:52
mingfeng07 发表于 2014-6-28 23:49
嗯,你这个也可以,你的是倒序条件赋值,每一个循环都将所有变量都遍历了一遍,如果变量太多的话,程序运 ...
恩!是这样的!那我能再请教一个问题吗?就是程序运行比较慢的问题。。。
我有一个20000多个变量的数据集,我要从中选取6000多个变量的数据,且按照规定排序,这个我运行了下,巨慢!!你有什么好办法吗?

地板
mingfeng07 学生认证  发表于 2014-6-30 21:29:28
阿呆sas 发表于 2014-6-30 12:59
恩!是这样的!那我能再请教一个问题吗?就是程序运行比较慢的问题。。。
我有一个20000多个变量的数据集 ...
这个得看你实际情况,因为我不知道你的选取规则是什么,所以也不太好说。反正是尽可能让代码执行效率高就行。比方说像你那种需要遍历所有变量的情况,执行效率太低,就需要排除掉。

7
阿呆sas 发表于 2014-7-5 14:31:37
mingfeng07 发表于 2014-6-30 21:29
这个得看你实际情况,因为我不知道你的选取规则是什么,所以也不太好说。反正是尽可能让代码执行效率高就 ...
恩 我明白了 谢谢你的帮助!!

8
阿呆sas 发表于 2014-7-5 18:32:10
mingfeng07 发表于 2014-6-30 21:29
这个得看你实际情况,因为我不知道你的选取规则是什么,所以也不太好说。反正是尽可能让代码执行效率高就 ...
不好意思 有个后续问题,就是我如果有多组想按上述的规则筛选,为甚么在一个程序里运行后的结果,会是累计的呢,就是我的id 不是唯一的了。就是说,如果我有十个观测值,两组按条件筛选的变量,最后结果就会出来二十个结果。结果给double了,怎么避免呢?

9
mingfeng07 学生认证  发表于 2014-7-6 22:56:34
阿呆sas 发表于 2014-7-5 18:32
不好意思 有个后续问题,就是我如果有多组想按上述的规则筛选,为甚么在一个程序里运行后的结果,会是累计 ...
你举个例子,上一下代码我看看。

10
阿呆sas 发表于 2014-7-7 19:32:03
mingfeng07 发表于 2014-7-6 22:56
你举个例子,上一下代码我看看。
比如:data famconjz3;
        set FAMCONJZ2;
    array F{30} NAME_A_671-NAME_A_700;
   do i=1 to 30;               if F{i}^='-8' then do;
                     A107NAME=F{i};
                     output;
                     leave;
                     end;
                end;
  array G{30}  name_A_491-name_a_520;
     do i=1 to 30;
               if G{i}^='-8' then do;
                     A103NAME=G{i};
                     output;
                     leave;
                     end;
                end;
run;
如果famconjz2里面有20个观测值,写完了 就有40个了。。。还是说我应该在一个do循环里面筛选?

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

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