1) почему вы используете указатели на класс string? 2) вы не должны использовать sizeof со строкой, он возвращает размер объекта, а не размер строки.
вы должны попробовать:
string text = "Text";
outfile.write(text.c_str(), text.size());
или
outfile<<text;
Ваш код, кажется, собирает уникальные значения по группам, превращаясь из высокой структуры данных в широкую структуру данных.
Один из самых ясных способов шага DATA - это использовать то, что мы называем циклом DOW, в котором SET находится внутри цикла. Этот пример кода предполагает не более 10 уникальных спутниковых значений на группу. (by
переменные можно рассматривать как ключевые переменные, а все остальные переменные будут спутники )
data have;
input user_id screen_id ;
datalines;
1 1
1 2
1 1
1 1
1 1
1 3
2 1
2 1
2 1
3 0
4 1
4 2
4 3
5 11
5 11
5 11
5 5
5 1
5 5
5 6
5 1
run;
data want;
_index = 0;
do until (last.user_id);
set have;
by user_id;
array ids screen_id1-screen_id10;
if screen_id not in ids then do;
_index + 1;
ids(_index) = screen_id;
end;
end;
drop _index screen_id;
run;
Одним из самых ясных процедурных способов является выбрать уникальные значения и транспонировать их.
proc sql;
create view uniqueScreenByUser as
select distinct user_id, screen_id
from have
order by user_id
;
proc transpose data=uniqueScreenByUser prefix=screen_id out=wantWide(drop=_name_);
by user_id;
var screen_id;
run;