由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Statistics版 - 求教如何根据每一行创建一个满足条件的宏变量?非常有挑战性的问题!
相关主题
求助SAS CODE:如何同时对90个variables进行log transformation?急问一个call symput问题(SAS)
R 问题请教这种freq 该用什么code算(sas)?Thanks!
R问题:给定一些日期,找出其中请教 如何用macro variabe 传递数值?
urgent help using sas or R for data managementSAS help: 在 Macro 里循环调用 windows-display 的问题
sas proc transpose can do this?请教sas问题
请教这个怎么用SAS简单实现请教一个call symput的问题
SAS 请教SAS Macro Function
killtest Q78 79 80问个sas编程的题
相关话题的讨论汇总
话题: 变量话题: var6话题: list1话题: list3话题: list4
进入Statistics版参与讨论
1 (共1页)
z****n
发帖数: 67
1
对下面这个data set我想实现的是针对每一行检查相应的变量var1 到变量var6。 如果
值在0 到
50之间的话,就把每一个相应的变量名称存在一个macro variable,并且以空格隔开。
所以最终
我要的结果是:
根据第1行有个macro variable叫做list1, 在list1里面存有变量var6
根据第2行有个macro variable叫做list2, 在list2里面存有变量var5 var6
根据第3行有个macro variable叫做list3, 在list3里面存有变量var4 var6
根据第4行有个macro variable叫做list4, 在list4里面是空的
并且每一行的新建的宏变量名,都要以该行的行序数结尾,比如1到4行,宏变量名相应
的为list1到list4
关键难点在于实际工作中我有300多个变量,所以必须一开始就把满足条件的变量名存在宏变量里
面,因为宏变量不会有长度的问题。如果先建立一个string变量存储那些满足条件的变量名,然后
再放到宏变量里面结果会有问题。因为string变量的长度会不够(SAS字符变量最大长度是200
D******n
发帖数: 2836
2
awaiting StatGuy to give u a python solution...
b******e
发帖数: 539
3
The maximum length of any character variable in the SAS System is 32767
bytes.
S******y
发帖数: 1123
4
#Python 2.5.4
#by_line.py 2010-09-02
#Per Da Sha Gen's request :-)
#A data structure proves to be handy here
S = '''0 0 0 0 0 1.2
0 0 0 0 5.8 4.7
58.8 0 0 30 0 33.3
100 0 0 100 0 66.6'''
ctr = 0
d={}
for line in S.split('\n'):
ctr += 1
d[ctr] = []
ls = [float(x) for x in line.split()]
for index, item in enumerate(ls):
if item < 50 and item > 0:
d[ctr].append(index+1)
else:
pass
#for examle, you would like to see line #3
line_number = 3
prin
P****D
发帖数: 11146
5
那是老黄历了,现在是32767了。不过默认长度是200,你要更长的要事先声明length。
另:宏字符变量长度也有限制的,也是32767。

【在 z****n 的大作中提到】
: 对下面这个data set我想实现的是针对每一行检查相应的变量var1 到变量var6。 如果
: 值在0 到
: 50之间的话,就把每一个相应的变量名称存在一个macro variable,并且以空格隔开。
: 所以最终
: 我要的结果是:
: 根据第1行有个macro variable叫做list1, 在list1里面存有变量var6
: 根据第2行有个macro variable叫做list2, 在list2里面存有变量var5 var6
: 根据第3行有个macro variable叫做list3, 在list3里面存有变量var4 var6
: 根据第4行有个macro variable叫做list4, 在list4里面是空的
: 并且每一行的新建的宏变量名,都要以该行的行序数结尾,比如1到4行,宏变量名相应

f*******e
发帖数: 51
6
try this:
data countmiss;
input var1 var2 var3 var4 var5 var6;
cards;
0 0 0 0 0 1.2
0 0 0 0 5.8 4.7
58.8 0 0 30 0 33.3
100 0 0 100 0 66.6
;
run;
data _null_;
set countmiss;
array var(*) var1-var6;
call symput("list"||strip(_N_),"");
do i=1 to dim(var);
if var(i)>0 and var(i) <50 then do;
call symput("list"||strip(_N_),symget("list"||strip(_N_))||" "||"var"||strip
(i));
end;
end;
run;
%put &list1 &list2 &list3 &list4;

【在 z****n 的大作中提到】
: 对下面这个data set我想实现的是针对每一行检查相应的变量var1 到变量var6。 如果
: 值在0 到
: 50之间的话,就把每一个相应的变量名称存在一个macro variable,并且以空格隔开。
: 所以最终
: 我要的结果是:
: 根据第1行有个macro variable叫做list1, 在list1里面存有变量var6
: 根据第2行有个macro variable叫做list2, 在list2里面存有变量var5 var6
: 根据第3行有个macro variable叫做list3, 在list3里面存有变量var4 var6
: 根据第4行有个macro variable叫做list4, 在list4里面是空的
: 并且每一行的新建的宏变量名,都要以该行的行序数结尾,比如1到4行,宏变量名相应

z****n
发帖数: 67
7
多谢楼上提醒,把楼上的code改成下面的就可以运行啦!
data countmiss;
input var1 var2 var3 var4 var5 var6;
cards;
0 0 0 0 0 1.2
0 0 0 0 5.8 4.7
58.8 0 0 30 0 33.3
100 0 0 100 0 66.6
;
run;
data _null_;
set countmiss;
array v(*) var1-var6;
call symput("list"||compress(_N_),"");
do i=1 to dim(v);
if 0< v(i) <50 then do;
call
symput("list"||compress(_N_),left(trim(symget("list"||compress(_N_))||"
"||"
var"||compress(i))));
end;
end;
run;
%put list1=&list1 ;
%put list2=&list2 ;
%put list3=&list3 ;
%put list4=&lis
b******e
发帖数: 539
8
我就是好奇为什么要把strip改成compress
z****n
发帖数: 67
9
我的sas不认识strip,不知道为什么。
1 (共1页)
进入Statistics版参与讨论
相关主题
问个sas编程的题sas proc transpose can do this?
关于stepwise programming请教这个怎么用SAS简单实现
请问sas中一个变量的内容被两个左斜杠(/)分成了三部分SAS 请教
[合集] └ Re: 关于stepwise programmingkilltest Q78 79 80
求助SAS CODE:如何同时对90个variables进行log transformation?急问一个call symput问题(SAS)
R 问题请教这种freq 该用什么code算(sas)?Thanks!
R问题:给定一些日期,找出其中请教 如何用macro variabe 传递数值?
urgent help using sas or R for data managementSAS help: 在 Macro 里循环调用 windows-display 的问题
相关话题的讨论汇总
话题: 变量话题: var6话题: list1话题: list3话题: list4