SET NOCOUNT ON is very useful in stored procedures - especially when called from SSIS/SSRS and other external applications. It removes that extra resultset that can cause issues for those applications.
NOLOCK is the same as READ UNCOMMITTED and allows for 'dirty' reads. This means your queries could return invalid data - meaning missing data or duplicated data - or failure due to data movement. It should be avoided as much as possible.
An alternative would be to enable SNAPSHOT isolation or set the database to RCSI. You can enable SNAPSHOT isolation which only enables the feature...and then use:
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
in your queries/procedures. This allows for that code to read data from a snapshot - avoiding any blocking on other processes writing to the database.
Definitely read up on that and understand the potential issues...