いつもお世話になっております。
テーブル内にある変数の内、まったく同一の値を持つ変数を特定したいのですが、
何か方法はないでしょうか?
EGのタスクが望ましいですが、PGMでも結構です。
相関係数でと考えていましたが、同一の値でなくても相関係数が1になるので、
この他の方法でと考えています。
よろしくお願いいたします。
Data Have;
input x y z w q;
datalines;
0 1 2 1 .
0 2 2 1 .
1 3 2 . .
1 4 2 1 .
;
proc means data=Have N NMISS Min Max stackods;
var _NUMERIC_;
ods output Summary=Summary;
run;
data Want;
set Summary;
if N=0 | NMISS=0 & (Min = Max); /* <=== */
run;
proc print data=Want;
run;
Or use PROC FREQ.
proc freq data=have nlevel ;
ods output nlevels=nlevels;
tables _numeric_ / noprint;
run;
proc print data=nlevels;
where nlevels=1;
run;
NNon Table NMiss Miss Obs Var NLevels Levels Levels 3 z 1 0 1 5 q 1 1 0
I think chie_sas wants to identify two variables that have same values. So try something like this
Data Have;
input x y z w q;
datalines;
0 1 2 3 3
0 2 2 4 4
1 3 2 5 5
1 4 2 6 6
;
data want(keep=name1 name2);
if _n_=0 then set have;
array num{*} _numeric_;
do i=1 to dim(num);
do j=i+1 to dim(num);
flg=0;
do k=1 to n;
set have point=k nobs=n;
flg+num{i}^=num{j};
end;
if flg=0 then do; name1=vname(num{i});
name2=vname(num{j}); output; end;
end;
end;
stop;
run;
テーブル中の文字列同士の値の比較もできるよう拡張しました。
Data Have;
length x y $10 z $5;
input x y z w q;
datalines;
a A A 3 3
b B B 4 4
c C C 5 5
d D D 6 6
;
run;
*---同一変数を探したいテーブル名を指定する;
%let _indt=Have;
proc contents data=&_indt. out=cont noprint;
run;
proc sort data=cont out=A(keep=name varnum);
by varnum;
run;
data B;
set A(rename=(name=NAME2 varnum=varnum2));
run;
proc sql noprint;
create table C as select name,name2 from A, B where varnum<varnum2;
select '%compare('||strip(name)||','||strip(name2)||');' into:_repeat separated by '' from C;
quit;
data cum; run;
%macro compare(_var,_with);
proc compare data=&_indt. noprint;
var &_var.; with &_with.;
run;
%let comp=&sysinfo.;
data comp;
comp=&comp.;
run;
data cum; set cum comp; if comp=. then delete; run;
%mend compare;
&_repeat.;
data want;
merge C cum;
run;
テーブル内の変数の2組の順列組み合わせを全て作ってから、2変数同士を対決させております。
同値であればデータセットwantの変数compに0が入力されております。文字値同士の比較は
Length(属性)は異なっていても内容が同値であれば0が返されます。comp=0以外の数値の細かい意味までは
判りかねます。
SAS Innovate 2025 is scheduled for May 6-9 in Orlando, FL. Sign up to be first to learn about the agenda and registration!