mirror of
https://github.com/sasjs/core.git
synced 2025-12-10 22:14:35 +00:00
fix: partial short numeric support in mp_ds2csv
This commit is contained in:
@@ -118,13 +118,21 @@ data _null_;
|
||||
header = cats(coalescec(varlabel(dsid,i),varnm),dlm);
|
||||
%end;
|
||||
%else %if &headerformat=SASJS %then %do;
|
||||
if vartype(dsid,i)='C' then header=cats(varnm,':$char',varlen(dsid,i),'.');
|
||||
vlen=varlen(dsid,i);
|
||||
if vartype(dsid,i)='C' then header=cats(varnm,':$char',vlen,'.');
|
||||
else do;
|
||||
vfmt=coalescec(varfmt(dsid,i),'0');
|
||||
fmttype=mcf_getfmttype(vfmt);
|
||||
if fmttype='DATE' then header=cats(varnm,':date9.');
|
||||
else if fmttype='DATETIME' then header=cats(varnm,':E8601DT26.6');
|
||||
else if fmttype='TIME' then header=cats(varnm,':TIME12.');
|
||||
/**
|
||||
* there is not much point importing a short length numeric like this,
|
||||
* eg with best4., as the resulting variable will still be stored as
|
||||
* length 8. We need a length or format statement to ensure variable
|
||||
* is creatd with the smaller length...
|
||||
**/
|
||||
else if vlen<8 then header=cats(varnm,':best',vlen,'.');
|
||||
else header=cats(varnm,':best.');
|
||||
end;
|
||||
%end;
|
||||
@@ -151,6 +159,7 @@ data _null_;
|
||||
set &ds end=last;
|
||||
%do i=1 %to &vcnt;
|
||||
%let var=%scan(&varlist,&i);
|
||||
%local vlen&i;
|
||||
%if %mf_getvartype(&ds,&var)=C %then %do;
|
||||
%let dsv1=%mf_getuniquename(prefix=csvcol1_);
|
||||
%let dsv2=%mf_getuniquename(prefix=csvcol2_);
|
||||
|
||||
43
tests/base/mp_ds2csv.test.2.sas
Normal file
43
tests/base/mp_ds2csv.test.2.sas
Normal file
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
@file
|
||||
@brief Testing mp_ds2csv.sas macro
|
||||
|
||||
<h4> SAS Macros </h4>
|
||||
@li mp_ds2csv.sas
|
||||
@li mp_assert.sas
|
||||
@li mp_assertscope.sas
|
||||
|
||||
**/
|
||||
|
||||
data work.shortnum;
|
||||
length a 3 b 4 c 8;
|
||||
a=1;b=2;c=3;
|
||||
output;
|
||||
stop;
|
||||
run;
|
||||
|
||||
/**
|
||||
* Test 1 - default CSV
|
||||
*/
|
||||
|
||||
%mp_ds2csv(work.shortnum,outfile="&sasjswork/test1.csv",headerformat=SASJS)
|
||||
|
||||
%let test1b=FAIL;
|
||||
data _null_;
|
||||
infile "&sasjswork/test1.csv";
|
||||
input;
|
||||
list;
|
||||
if _n_=1 then call symputx('test1a',_infile_);
|
||||
else if _infile_=:'1,2,3' then call symputx('test1b','PASS');
|
||||
run;
|
||||
|
||||
%mp_assert(
|
||||
iftrue=("&test1a"="A:best3. B:best4. C:best."),
|
||||
desc=Checking header row Test 1,
|
||||
outds=work.test_results
|
||||
)
|
||||
%mp_assert(
|
||||
iftrue=("&test1b"="PASS"),
|
||||
desc=Checking data row Test 1,
|
||||
outds=work.test_results
|
||||
)
|
||||
Reference in New Issue
Block a user