BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
JeffreyLowe
Obsidian | Level 7

Greetings......

 

I need to loop through a folder of CSV files to get the number of rows from each file (excluding the header row) insert the file name and row count into an existing dataset and lastly delete the file.

 

For Example:

 

File1 250

insert fname rowcount into CSVRowCounts

delete File 1

File2 95

insert fname rowcount into CSVRowCounts

delete File2

 

and so on.....

 

Any assistance is greatly appreciated.

1 ACCEPTED SOLUTION

Accepted Solutions
ghosh
Barite | Level 11

This method linked below had worked for me for csv file (as well as xlsx with slight modification), you can insert code to do a row count.  Seriously I wouldn't delete the the csv files in code, I would do it manually once I am satisfied the import worked

 

https://documentation.sas.com/?docsetId=mcrolref&docsetTarget=n0ctmldxf23ixtn1kqsoh5bsgmg8.htm&docse...

 

There is also a post by @Tom that looks pretty good 

https://communities.sas.com/t5/SAS-Enterprise-Guide/quot-Example-1-Import-All-CSV-Files-That-Exist-w...

View solution in original post

8 REPLIES 8
JerryV
SAS Employee

If this is on Linux then in a terminal session I would cd to the folder in question and:  

wc -l *.csv 1>csvRowCounts.txt

rm -f *.csv

 

Then in SAS you can read csvRowCounts.txt into SAS and subtract 1 from each count.  But I wouldn't rm the files until you are sure of your result.

 

JerryV
SAS Employee

And if it's Windows, at a command prompt cd to the directory in question and:

find /c /v "^$" *.csv >csvRowCount.txt

 

Read csvRowCount.txt into SAS and don't forget to subtract 1 from the count.

JeffreyLowe
Obsidian | Level 7
Good solutions, I should have added this is for an automated process that will run weekly.
JerryV
SAS Employee
Perhaps put the above OS commands, first, in the same script that launches the SAS session?
Kurt_Bremser
Super User

Even simpler: use a pipe.

data size_and_names;
infile "cd /path;wc -l *.csv" pipe truncover;
input size fname $200.;
run;

From that dataset, it is possible to get the counts and run the fdelete.

 

ghosh
Barite | Level 11

This method linked below had worked for me for csv file (as well as xlsx with slight modification), you can insert code to do a row count.  Seriously I wouldn't delete the the csv files in code, I would do it manually once I am satisfied the import worked

 

https://documentation.sas.com/?docsetId=mcrolref&docsetTarget=n0ctmldxf23ixtn1kqsoh5bsgmg8.htm&docse...

 

There is also a post by @Tom that looks pretty good 

https://communities.sas.com/t5/SAS-Enterprise-Guide/quot-Example-1-Import-All-CSV-Files-That-Exist-w...

Ksharp
Super User

Firstly get all the pathname of these CSV file by DIR or LS command, and Run the following code. 

Good Luck.

data want;
infile cards truncover;
input path $ 100.;
n_obs=0;
infile dummy filevar=path end=last;
do while(not last);
 input;
 n_obs+1;
end;
file=path;
cards;
c:\temp\have.csv
c:\temp\x.csv
c:\temp\xx.csv
;

  

JeffreyLowe
Obsidian | Level 7

Thank you everyone for your responses!

SAS Innovate 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 8 replies
  • 3178 views
  • 6 likes
  • 5 in conversation