对于expamle,我有一个表A,其中有两个变量,第一个是客户ID,第二个是客户的收入,范围从100到200美元。我的任务是创建一个表格B,在那里我的客户的平均收入是150美元,客户数量应该是最大的。换句话说,我需要拥有表B,其中来自表A的客户数量最多,而表B的客户之间的收入均值应该完全等于150.有没有使用SAS Enterprise Guide的优雅方法?选择变量的均值(SAS)
2
A
回答
1
按收入对记录进行排序,由低到高排序。然后计算所有记录的平均值1-N。找到N其中平均值= 150.
data test;
do id = 1 to 1000;
income = 100 + round(ranuni(1)*100,1);
output;
end;
run;
proc sort data=test;
by income;
run;
data want(where=(ave<=150));
set test;
retain sum 0;
sum = sum + income;
ave = sum/_n_;
drop sum;
run;
您希望获得尽可能多的低值。然后这可以让你添加大的值来使平均值达到150.所以按收入排序应该给你你想要的。
0
一个贪婪算法可以很好地完成这项工作,具体取决于数据的结构。这绝对不能保证是最佳的,但它可以相对较快地实施。
的理念是:
- 计算的所有记录平均
- 如果平均是$ 150,然后停止
- 删除,以增加或降低平均最大/最小值酌情
- 如果平均为$ 150随后停止
- 重复(1),直到完成
这应该工作得很好,如果价值大约150美元。如果他们广泛分散,那么你可能不会在最后的箱子里得到任何记录。
如果算法适用于您的数据,那么可能会有更快的方法来实现它。
相关问题
- 1. 选择变量仅当存在SAS SQL
- 2. 如何在SAS中动态选择索引赋值变量?
- 3. 变量的SAS最大值
- 4. SAS - 选择最佳数量
- 5. 选择变量动态值
- 6. SAS帮助:如何移动SAS中AGE变量的内容(N,平均值,最小值和最大值)?
- 7. SAS:两个变量的平均值,中位数,最大值和百分位数
- 8. 选择平均列值
- 9. 如何选择SAS中的任何2个或多个变量
- 10. SAS从字典列中排除选择的变量
- 11. SAS:选择多列值的频率
- 12. 修改SAS中的宏变量的值
- 13. 在SAS中的datastep中计算变量的平均值和标准差
- 14. SAS:对于一个给定的变量的所有组合创建平均值
- 15. SAS跨多个变量的比较值
- 16. SAS中数值变量的上下限
- 17. 选择平均FROM选择平均
- 18. SAS宏变量的变化
- 19. 选择最接近变量的值
- 20. 选择最大值的变量
- 21. PHP获取url的变量值选择
- 22. 在SAS中创建一个包含3组平均值的变量
- 23. 变量选择
- 24. 变量选择
- 25. 选择变量随机的,但所有的变量应该从阵列均等地选择
- 26. 变化值变量的JavaScript如果选择字段值变化
- 27. jQuery的均匀变化选择大小
- 28. 平均堆栈应用的控制器选择从范围变量不同值
- 29. 选择值大于平均值
- 30. SAS中条件均值的函数
我不认为有一个优雅的方法来获得这样一个最大的子集。如果有的话,我也很好奇。 –