Как преобразовать набор данных SAS в шаг данных - PullRequest
0 голосов
/ 02 ноября 2018

Как я могу преобразовать свой набор данных SAS в набор данных, который я могу легко вставить в форум или передать кому-то для репликации моих данных. В идеале я также хотел бы иметь возможность контролировать количество включаемых записей.

Т.е. у меня есть sashelp.class в библиотеке SASHELP, но я хочу предоставить его здесь, чтобы другие могли использовать его в качестве отправной точки для моего вопроса.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Эта тема недавно появилась в сообществах SAS, и я создал немного более надежный макрос, чем тот, который связал Reeza. Вы можете увидеть это в Github: ds2post.sas

* Pull macro definition from GITHUB ;
filename ds2post url
  'https://raw.githubusercontent.com/sasutils/macros/master/ds2post.sas'
;
%include ds2post ;

Например, если вы хотите поделиться первыми 5 наблюдениями SASHELP.CARS, вы должны запустить этот макрос:

%ds2post(sashelp.cars,obs=5)

Что сгенерирует этот код в журнал SAS:

data work.cars (label='2004 Car Data');
  infile datalines dsd dlm='|' truncover;
  input Make :$13. Model :$40. Type :$8. Origin :$6. DriveTrain :$5.
    MSRP Invoice EngineSize Cylinders Horsepower MPG_City MPG_Highway
    Weight Wheelbase Length
  ;
  format MSRP dollar8. Invoice dollar8. ;
  label EngineSize='Engine Size (L)' MPG_City='MPG (City)'
    MPG_Highway='MPG (Highway)' Weight='Weight (LBS)'
    Wheelbase='Wheelbase (IN)' Length='Length (IN)'
  ;
datalines4;
Acura|MDX|SUV|Asia|All|36945|33337|3.5|6|265|17|23|4451|106|189
Acura|RSX Type S 2dr|Sedan|Asia|Front|23820|21761|2|4|200|24|31|2778|101|172
Acura|TSX 4dr|Sedan|Asia|Front|26990|24647|2.4|4|200|22|29|3230|105|183
Acura|TL 4dr|Sedan|Asia|Front|33195|30299|3.2|6|270|20|28|3575|108|186
Acura|3.5 RL 4dr|Sedan|Asia|Front|43755|39014|3.5|6|225|18|24|3880|115|197
;;;;

Попробуйте этот маленький тест, чтобы сравнить два макроса.

Сначала создайте образец набора данных с несколькими проблемами.

data testit;
  set sashelp.class (obs=5);
  if _n_=1 then name='Le Bron';
  if _n_=2 then age=.;
  if _n_=3 then wt=.;
  if _n_=4 then name='12;34';
run;

Затем запустите оба макроса, чтобы выгрузить код в журнал SAS.

%ds2post(testit);
%data2datastep(dsn=testit,obs=20);

Скопируйте код из журнала. Изменение имени в операторах DATA, чтобы не перезаписывать исходный набор данных или друг друга. Запустите их и сравните результат с оригиналом.

proc compare data=testit compare=testit1; run;
proc compare data=testit compare=testit2; run;

Результат с использованием %DS2POST:

The COMPARE Procedure
Comparison of WORK.TESTIT with WORK.TESTIT1
(Method=EXACT)

Data Set Summary

Dataset                Created          Modified  NVar    NObs

WORK.TESTIT   02NOV18:17:09:40  02NOV18:17:09:40     6       5
WORK.TESTIT1  02NOV18:17:10:29  02NOV18:17:10:29     6       5

Variables Summary

Number of Variables in Common: 6.

Observation Summary

Observation      Base  Compare

First Obs           1        1
Last  Obs           5        5

Number of Observations in Common: 5.
Total Number of Observations Read from WORK.TESTIT: 5.
Total Number of Observations Read from WORK.TESTIT1: 5.

Number of Observations with Some Compared Variables Unequal: 0.
Number of Observations with All Compared Variables Equal: 5.

Сводка результатов с использованием %Data2DataStep:

Comparison of WORK.TESTIT with WORK.TESTIT2
(Method=EXACT)

Data Set Summary

Dataset                Created          Modified  NVar    NObs

WORK.TESTIT   02NOV18:17:09:40  02NOV18:17:09:40     6       5
WORK.TESTIT2  02NOV18:17:10:29  02NOV18:17:10:29     6       3


Variables Summary

Number of Variables in Common: 6.


Observation Summary

Observation      Base  Compare

First Obs           1        1
First Unequal       1        1
Last  Unequal       3        3
Last  Match         3        3
Last  Obs           5        .

Number of Observations in Common: 3.
Number of Observations in WORK.TESTIT but not in WORK.TESTIT2: 2.
Total Number of Observations Read from WORK.TESTIT: 5.
Total Number of Observations Read from WORK.TESTIT2: 3.

Number of Observations with Some Compared Variables Unequal: 3.
Number of Observations with All Compared Variables Equal: 0.

Сводка значений переменных

Values Comparison Summary

Number of Variables Compared with All Observations Equal: 1.
Number of Variables Compared with Some Observations Unequal: 5.
Number of Variables with Missing Value Differences: 4.
Total Number of Values which Compare Unequal: 12.
Maximum Difference: 0.


Variables with Unequal Values

Variable  Type  Len  Ndif   MaxDif  MissDif

Name      CHAR    8     1                 0
Sex       CHAR    1     3                 3
Age       NUM     8     2        0        2
Height    NUM     8     3        0        3
Weight    NUM     8     3        0        3

Обратите внимание, что я уверен, что есть значения, которые также вызовут проблемы для моего макроса. Но, надеюсь, они вызваны данными, которые встречаются реже, чем пробелы или точки с запятой.

0 голосов
/ 02 ноября 2018

Для этого вы можете использовать макрос, написанный Марком Джорданом в SAS, код также хранится в GitHub.

Вам необходимо указать имя набора данных, включая библиотеку и количество наблюдений, которые вы хотите вывести. Принимает их по порядку. Код появится в вашем журнале SAS.

*data set you want to create demo data for;
%let dataSetName = sashelp.Class;
*number of observations you want to keep;
%let obsKeep = 5;


******************************************************
DO NOT CHANGE ANYTHING BELOW THIS LINE
******************************************************;

%let source_path = https://gist.githubusercontent.com/statgeek/bcc55940dd825a13b9c8ca40a904cba9/raw/865d2cf18f5150b8e887218dde0fc3951d0ff15b/data2datastep.sas;

filename reprex url "&source_path";
%include reprex;
filename reprex;

option linesize=max;
%data2datastep(dsn=&dataSetName, obs=&obsKeep);

Это может не сработать, если у вас нет доступа к странице github, в этом случае вы можете вручную перейти на страницу (та же ссылка) и скопировать / вставить ее в SAS. Затем запустите программу и запустите только последний шаг, %data2datastep(dsn=, obs=);

...